[類別] 建構元的多載

建構元就跟一般函數一樣
只差在函數名稱必須跟類別名稱相同
而且沒有傳回值

建構元也可以多載
提供使用者更方便的初始化物件方法

在「[類別] 建構元」單元中
我們撰寫了自己的建構元
如下:

[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]

有疑問? 留個言吧!

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料