當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > C++ 類構(gòu)造函數(shù)
C++中,有一類比較特殊的函數(shù)--構(gòu)造函數(shù),構(gòu)造函數(shù)是類的一種特殊的成員函數(shù),它會(huì)在每次創(chuàng)建類的新對(duì)象時(shí)執(zhí)行。構(gòu)造函數(shù)的名稱與類的名稱是完全相同的,并且不會(huì)返回任何類型,也不會(huì)返回 void。構(gòu)造函數(shù)可用于為某些成員變量設(shè)置初始值。
構(gòu)造函數(shù)主要用來(lái)在創(chuàng)建對(duì)象時(shí)完成對(duì)對(duì)象屬性的一些初始化等操作, 當(dāng)創(chuàng)建對(duì)象時(shí), 對(duì)象會(huì)自動(dòng)調(diào)用它的構(gòu)造函數(shù)。一般來(lái)說(shuō), 構(gòu)造函數(shù)有以下三個(gè)方面的作用:
1) 給創(chuàng)建的對(duì)象建立一個(gè)標(biāo)識(shí)符;
2) 為對(duì)象數(shù)據(jù)成員開(kāi)辟內(nèi)存空間;
3) 完成對(duì)象數(shù)據(jù)成員的初始化。
無(wú)論是用戶自定義的構(gòu)造函數(shù)還是默認(rèn)構(gòu)造函數(shù)都主要有以下特點(diǎn):
1) 在對(duì)象被創(chuàng)建時(shí)自動(dòng)執(zhí)行;
2) 構(gòu)造函數(shù)的函數(shù)名與類名相同;
3) 沒(méi)有返回值類型、也沒(méi)有返回值;
4) 構(gòu)造函數(shù)不能被顯式調(diào)用。
由于在大多數(shù)情況下我們希望在對(duì)象創(chuàng)建時(shí)就完成一些對(duì)成員屬性的初始化等工作, 而默認(rèn)構(gòu)造函數(shù)無(wú)法滿足我們的要求, 所以我們需要顯式定義一個(gè)構(gòu)造函數(shù)來(lái)覆蓋掉默認(rèn)構(gòu)造函數(shù)以便來(lái)完成必要的初始化工作, 當(dāng)用戶自定義構(gòu)造函數(shù)后編譯器就不會(huì)再為對(duì)象生成默認(rèn)構(gòu)造函數(shù)。
在構(gòu)造函數(shù)的特點(diǎn)中我們看到, 構(gòu)造函數(shù)的名稱必須與類名相同, 并且沒(méi)有返回值類型和返回值, 看一個(gè)構(gòu)造函數(shù)的定義:
#include <iostream>
using namespace std;
class Student
{
public:
Student()//無(wú)參數(shù)構(gòu)造函數(shù)
{
number = 0;
score = 90;
}
void show();
protected:
int number;
int score;
};
void Student::show()
{
cout<<number<<endl<<score<<endl;
}
void main()
{
Student a;
a.show();
cin.get();
}
執(zhí)行結(jié)果:0
90
在類中的定義的和類名相同,并且沒(méi)有任何返回類型的Student()就是構(gòu)造函數(shù),這是一個(gè)無(wú)參數(shù)的構(gòu)造函數(shù),他在對(duì)象創(chuàng)建的時(shí)候自動(dòng)調(diào)用,如果去掉Student()函數(shù)體內(nèi)的代碼那么它和c++的默認(rèn)提供的構(gòu)造函數(shù)等價(jià)的。
構(gòu)造函數(shù)可以帶任意多個(gè)的形式參數(shù),這一點(diǎn)和普通函數(shù)的特性是一樣的!