呵~軟考要來了~怕怕~趕緊復習一下. ^_^
構造函數是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..
本文出自 “雞蛋仔” 博客,謝絕轉載!