tft每日頭條

 > 生活

 > 構造函數的理解

構造函數的理解

生活 更新时间:2024-12-04 03:42:46

構造函數:

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

要求:函數名=類型名,不能定義返回值類型,也不能有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;

構造函數的理解(構造函數基本概念)1

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved