當前位置:
首頁 > 知識 > 構造函數基本概念

構造函數基本概念

構造函數:

作用:在對象被創建時使用特定的值構造對象,將對象初始化為一個特定的初始狀態

要求:函數名=類型名,不能定義返回值類型,也不能有return語句

使用:Clock c(實參1, 實參2,……);

如果沒有定義構造函數,編譯器將在需要時自動生成一個默認構造函數,這個默認構造函數參數列表為空,且初始值可能不確定

如果定義了構造函數,編譯器就不再隱含生成默認構造函數,如果此時依然希望編譯器隱含生成默認構造函數,可以使用「Clock() = default;」

非法例子1:

  1. class Clock
  2. {
  3. public:
  4. Clock(int H);
  5. Clock(int H, int M=2, int S=2);
  6. ……
  7. }
  8. int main(void)
  9. {
  10. Clock t(5);
  11. ……
  12. }

錯誤原因:雖然一個對象可以定義多個構造函數,但是上面這兩個構造函數都可以只接受一個實參,這樣當你「Clock k(5)」時系統就不知道使用哪個構造函數而出錯

非法例子2:

  1. class Clock
  2. {
  3. public:
  4. Clock(int H);
  5. ……
  6. }
  7. int main(void)
  8. {
  9. Clock t;
  10. ……
  11. }

錯誤原因:如果定義了構造函數,編譯器就不再隱含生成默認構造函數,所以你在定義新的Clock對象時,就必須傳遞一個參數以使用上面你自己定義的的構造函數,例如Clock t(5);

合法例子:(代碼中有注釋)

  1. #include<iostream>
  2. using namespace std;
  3. class Clock
  4. {
  5. public:
  6. // Clock() = default;
  7. Clock();
  8. Clock(int H, int M, int S=0); //構造函數,這樣就可以在構造一個Clock類對象時直接設定時間的默認值
  9. void set(int H, int M, int S);
  10. void Show();
  11. private:
  12. int h, m, s;
  13. };
  14. Clock::Clock(): h(1),m(0),s(0) //冒號後面是初始化列表,相當於就是在函數裡面初始化
  15. {
  16. }
  17. Clock::Clock(int H, int M, int S)
  18. {
  19. h = H, m = M, s = S;
  20. }
  21. void Clock::set(int H, int M, int S)
  22. {
  23. h = H, m = M, s = S;
  24. }
  25. void Clock::Show()
  26. {
  27. cout<<h<<":"<<m<<":"<<s<<endl;
  28. }
  29. int main(void)
  30. {
  31. Clock k, c(5,0,0);
  32. k.Show(); //k定義時會調用第一個構造函數,輸出1:00:00
  33. c.Show(); //c定義時傳遞了3個參數,會調用第二個構造函數,輸出5:00:00
  34. c.set(8, 30, 30);
  35. c.Show();
  36. return 0;

構造函數基本概念

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

TensorFlow 數據讀取
模塊化方式構建Node.js應用程序

TAG:程序員小新人學習 |