天天看點

C++學習筆記(構造函數)

我們通常在定義變量的時候會對其初始化,同樣,當我們定義了對象之後,也希望對對象進行初始化,對其指派。但是我們知道類中的資料成員是私有的,不能像普通變量那樣對其指派。那麼該怎樣對類的對象初始化呢?對此,我們先給出如下的定義,然後再一步步解釋程式的含義。

#include<iostream>

using namespace std;

class Test

{

public:

Test( )//構造函數1

{

    num=0;

}

Test(int Num)//構造函數2

{

    num=Num;

}

private://資料成員

int num;

};

int main()

{

Test t1;//建立對象t1,并調用構造函數1為t1.num指派為0

        Test t2(10);//建立對象t2,并調用構造函數2為t2.num指派為10

}

在主函數中我們首先建立了t1對象,為了實作在建立對象的時候對其初始化,C++提供了專門用于對對象初始化的函數——構造函數。構造函數的函數名與類名相同,而且該函數沒有傳回值(如上的構造函數1和構造函數2)。程式建立對象的時候,就會自動調用構造函數對對象初始化,是以,t1對象會被初始化為0(調用構造函數1)。主程式的第二行建立了另外一個對象t2,t2對象會被初始化為10(調用構造函數2)。由此,我們可以知道,構造函數的個數可以不止一個(函數的重載)。當然,我們可以在類中對函數進行聲明,在類外對函數進行定義,但是,如果在類外對函數定義時,就要指出該函數屬于哪個類(複雜程式不止一個類)。如下為在類外定義函數的方法:

#include<iostream>

using namespace std;

class Test

{

public:

Test();//構造函數1

Test(int Num);//構造函數2

private://資料成員

int num;

};

Test::Test()//類外定義構造函數1

{

num=0;

}

Test::Test(int Num)//類外定義構造函數2

{

num=Num;

}

void main()

{

Test t1;//調用構造函數1

Test t2(10);//調用構造函數2

}

在類外定義構造函數的時候通過::來指明函數屬于哪個類。通常,假如我們不編寫構造函數,系統會自動調用預設的構造函數,預設的構造函數不會做任何工作。為了驗證t1對象調用構造函數1,t2對象調用構造函數2,我們将程式改為如下的形式:

#include<iostream>

using namespace std;

class Test

{

public:

Test();

Test(int Num);

private:

int num;

};

Test::Test()

{

num=0;

cout<<"construct function 1"<<endl;

}

Test::Test(int Num)

{

num=Num;

cout<<"construct function 2"<<endl;

}

void main()

{

Test t1;

Test t2(10);

}

然後再vc上運作該程式,結果如下:

C++學習筆記(構造函數)

繼續閱讀