程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 構造函數(復習筆記)

構造函數(復習筆記)

編輯:關於C語言

呵~軟考要來了~怕怕~趕緊復習一下. ^_^   構造函數是C++中的重點.也是難點.   構造函數是用來創建對象的.而默認的構造函數是在沒有提示顯示的初始化的時候才會出現的. 默認的構造函數可以用於以下的聲明: Example Test_A; //Example 是類.  //這句是聲明了一個對象Test_A 注意:當且僅當沒有任何構造函數的時候.C++才會自動添加默認的構造函數.是不做任何的工作的.   這裡做一個假設.假設你有提供了一個非默認的構造函數.卻沒有對這個構造函數進行定義.那麼上面那條聲明語句: Example Test_A;就會出錯.出錯的原因是:不禁止創建未初始化的對象.從這句話也可以看出來構造函數的用處了.說白了點構造函數是用來創建和初始人對象用的.   如果程序員自己定義了一個非默認的構造函數.如何讓上面那條語句合法呢?   定義默認構造函數的二種方法: 1.       給已有的構造函數的所有參數都進行定義. 例:example(int a=0,int b=0,int c=0); 2.       定義一個沒有參數的構造函數.(這其實就是我們所說的函數重載了.是對C++自動加上構造函數overload) 例: example() { //這裡面就可以對成員進行初始化了. int a=0,b=0,c=0; } 這種是標准的寫法.當然也可以這樣子寫了: example()::a(0),b(0),c(0){}  //這做寫法看起來比較帥. 這兩個是等同.   一個類中只能有一個默認的構造函數.也就是說.上面的二種方法是不可以同時進行的. 注意:構造函數沒有傳回數據類型,連void也沒有.也就是說構造函數沒有聲明的類型 好程序的風格:在定義默認的構造函數的時候就應該初始對象.確保有一個已知的.合理的.合法的值. 默認的構造函數通常是給所有的成員提供隱式的初始值.   使用以上的任何一種方法都可以聲明對象變量.而且不需要進行顯示的初始化. 例: Example Test_A; Example Test_B= Example (); Example *ptr=new Example;   對於第1個方法:不可以這樣子進行定義: 假設:a,b,c是類的私有成員.那麼. Example(int a=0,int b=0,int c=0)是錯誤的.因為函數的參數不能夠表示類的成員.而是賦值給類的成員的值.因此.函數的參數是不能夠與類的成員相同. 好程序的風格:為了避免這種情況的發生.可以在類的成員前面加上m_前綴.來進行區分. m_a,m_b,m_c;   For Example: Example Test_C(“concrete conglomerate”);//這個聲明是調用非默認構造函數,即接受參數的構造函數; Example Test_D();//這個聲明指出:Test_D是一個返回Example對象的函數. Example Test_E;//這個聲明是調用默認的構造函數.不要用圓括號的.   當我們對對象進行定義時候.如:Explam Test_C; 這時候缺省的構函數就會被調用.   在<<on to C++>>這書中也寫的相當的詳細: [quote start] How to define constructor member function In class definitions ,default constructor functions stand apart from other member functions in three ways: 1.       The default constructor function’s name is the same as the name of class 2.       The default constructor function has no return-value data type 3.       The default constructor function cannot have a parameter. [quote end] Now following a class: const double pi=3.14; class Test_A {      public: double radius,length;      Test_A (){radius=2.0;length=4.0;}      //constructor with two parameters      Test_A(double r,double l){ radius=r;length=l;}      double volume(){return pi*radius*radius*length;} } Qustions: 1.       Is it worng? 2.       Where is the private member? --- Next anonymous constructor and copy constructor and so on. To be continue..  

本文出自 “雞蛋仔” 博客,謝絕轉載!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved