請注意,這一節(jié)內(nèi)容是c++的重點(diǎn),要特別注意!
我們先說一下什么是構(gòu)造函數(shù)。
上一個教程我們簡單說了關(guān)于類的一些基本內(nèi)容,對于類對象成員的初始化我們始終是建立成員函數(shù)然后手工調(diào)用該函數(shù)對成員進(jìn)行賦值的,那么在c++中對于類來說有沒有更方便的方式能夠在對象創(chuàng)建的時候就自動初始化成員變量呢,這一點(diǎn)對操作保護(hù)成員是至關(guān)重要的,答案是肯定的。關(guān)于c++類成員的初始化,有專門的構(gòu)造函數(shù)來進(jìn)行自動操作而無需要手工調(diào)用,在正式講解之前先看看c++對構(gòu)造函數(shù)的一個基本定義。
1.C++規(guī)定,每個類必須有默認(rèn)的構(gòu)造函數(shù),沒有構(gòu)造函數(shù)就不能創(chuàng)建對象。
2.若沒有提供任何構(gòu)造函數(shù),那么c++提供自動提供一個默認(rèn)的構(gòu)造函數(shù),該默認(rèn)構(gòu)造函數(shù)是一個沒有參數(shù)的構(gòu)造函數(shù),它僅僅負(fù)責(zé)創(chuàng)建對象而不做任何賦值操作。
3.只要類中提供了任意一個構(gòu)造函數(shù),那么c++就不在自動提供默認(rèn)構(gòu)造函數(shù)。
4.類對象的定義和變量的定義類似,使用默認(rèn)構(gòu)造函數(shù)創(chuàng)建對象的時候,如果創(chuàng)建的是靜態(tài)或者是全局對象,則對象的位模式全部為0,否則將會是隨即的。
我們來看下面的代碼: #include <iostream> using namespace std; class Student { public: Student()//無參數(shù)構(gòu)造函數(shù) { number = 1; score = 100; } void show(); protected: int number; int score; }; void Student::show() { cout<<number<<endl<<score<<endl; } void main() { Student a; a.show(); cin.get(); } 在類中的定義的和類名相同,并且沒有任何返回類型的Student()就是構(gòu)造函數(shù),這是一個無參數(shù)的構(gòu)造函數(shù),他在對象創(chuàng)建的時候自動調(diào)用,如果去掉Student()函數(shù)體內(nèi)的代碼那么它和c++的默認(rèn)提供的構(gòu)造函數(shù)等價的。 構(gòu)造函數(shù)可以帶任意多個的形式參數(shù),這一點(diǎn)和普通函數(shù)的特性是一樣的!
|