建構元就跟一般函數一樣
只差在函數名稱必須跟類別名稱相同
而且沒有傳回值
建構元也可以多載
提供使用者更方便的初始化物件方法
在「[類別] 建構元」單元中
我們撰寫了自己的建構元
如下:
[code language=”cpp”]
#include <iostream>
using namespace std;
class time
{
public:
time (int,int,double);
void show(void);
private:
int hour;
int minute;
double second;
};
time::time (int a,int b,double c){
hour=a;
minute=b;
second=c;
}
void time::show(){
cout << hour << " : " << minute << " : " << second << endl;
}
int main(){
time t1(12,12,12);
time t2; //無法使用原本的方法建立物件
t1.show();
}
[/code]
發現一件事
我們無法像以前一樣
單純建立物件而不設值
問題出在什麼地方呢?
預設建構元
編譯器在程式設計者沒有自訂任何建構元時
會自行提供一個預設的建構元
像這樣:
類別名稱 (){ }
定義裡面是沒有任何東西
也就是建立物件之後
不會做任何事
在程式設計者提供自訂建構元之後
編譯器將不再提供預設建構元
代表說
撰寫所有建構元的責任
回歸到程式設計者身上
我們該如何撰寫剛剛失敗的程式呢?
自行再建立一個預設建構元就可以了
Ex:
[code language=”cpp”]
#include <iostream>
using namespace std;
class time
{
public:
time (int,int,double);
time (void){}; //將預設建構元寫進去
void show(void);
private:
int hour;
int minute;
double second;
};
time::time (int a,int b,double c){
hour=a;
minute=b;
second=c;
}
void time::show(){
cout << hour << " : " << minute << " : " << second << endl;
}
int main(){
time t1(12,12,12);
time t2;
t1.show();
}
[/code]