3. 類別的建構式(建構子,constructor),形式和函式有點像(不過不需要回傳型別),建構式名稱需要和類別名稱相同。是在建立類別物件時,用來進行類別物件成員初始化的工具,可以在類別的public區域內設定建構式。且建構式可以對類別內任何區域的成員進行初始化。
class classA
{
public:
int a;
classA(int a_, int b_, int c_){a=a_;b=b_;c=c_;} //設定此類別第一個建構式
classA(){a=5;b=10;c=15;} //設定此類別第二個建構式
void printvalue()
{cout<<a<<","<<b<<","<<c<<"."<<endl;} //設定輸出所有類別成員的函式
protected:
int b;
private:
int c;
} ;
classA A1(1,2,3); //利用第一個建構式建立類別物件,並為類別物件成員設初始值。
classA A2; //利用第二個建構式建立類別物件,並為類別物件成員設初始值。
A1.printvalue(); //顯示 1,2,3.
A2.printvalue(); //顯示 5,10,15
註一:類別建構式不一定要對所有類別物件成員進行初始化,只對其中一、兩個類別物件成員進行初始化也可以,沒有被進行初始化的類別物件成員便沒有值,或是也可以其他函式進行初始化。
註二:若程式設計者在一個類別沒有設定任何類別建構式,則C++會自動為該類別建立一個建構式(程式碼中看不到),相當於 類別名稱(){},利用此建構式建立物件時,不會對類別物件成員進行任何初始化,如(2)中的classA A。稱為「備用建構式」。
註三:利用建構式建立類別物件時,也可以使用「動態空間建構方式」,也就是使用指標(pointer)來建構,程式碼如:
類別名稱* 類別物件名稱 = new 類別建構式
舉例:
classA *A1 =new classA (1,2,3);
classA *A2 =new classA;
不過這麼一來,若要呼叫類別物件成員函式就無法用:
類別物件名稱.類別物件成員函式名稱(參數1,參數2)
而要用:
類別物件名稱->類別物件成員函式名稱(參數1,參數2)
舉例:
A1->printvalue();
A2->printvalue();
留言列表