[類別] 建構元的多載

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

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

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

#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();
 
}

 

發現一件事
我們無法像以前一樣
單純建立物件而不設值
問題出在什麼地方呢?

預設建構元
編譯器在程式設計者沒有自訂任何建構元時
會自行提供一個預設的建構元
像這樣:
類別名稱 (){ }

定義裡面是沒有任何東西
也就是建立物件之後
不會做任何事

在程式設計者提供自訂建構元之後
編譯器將不再提供預設建構元
代表說
撰寫所有建構元的責任
回歸到程式設計者身上

我們該如何撰寫剛剛失敗的程式呢?
自行再建立一個預設建構元就可以了
Ex:

 

#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();
 
}



有疑問? 留個言吧!

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