構造函數:
作用:在對象被創建時使用特定的值構造對象,将對象初始化為一個特定的初始狀态
要求:函數名=類型名,不能定義返回值類型,也不能有return語句
使用:Clock c(實參1, 實參2,……);
如果沒有定義構造函數,編譯器将在需要時自動生成一個默認構造函數,這個默認構造函數參數列表為空,且初始值可能不确定
如果定義了構造函數,編譯器就不再隐含生成默認構造函數,如果此時依然希望編譯器隐含生成默認構造函數,可以使用“Clock() = default;”
非法例子1:
- class Clock
- {
- public:
- Clock(int H);
- Clock(int H, int M=2, int S=2);
- ……
- }
- int main(void)
- {
- Clock t(5);
- ……
- }
錯誤原因:雖然一個對象可以定義多個構造函數,但是上面這兩個構造函數都可以隻接受一個實參,這樣當你“Clock k(5)”時系統就不知道使用哪個構造函數而出錯
非法例子2:
- class Clock
- {
- public:
- Clock(int H);
- ……
- }
- int main(void)
- {
- Clock t;
- ……
- }
錯誤原因:如果定義了構造函數,編譯器就不再隐含生成默認構造函數,所以你在定義新的Clock對象時,就必須傳遞一個參數以使用上面你自己定義的的構造函數,例如Clock t(5);
合法例子:(代碼中有注釋)
- #include<iostream>
- using namespace std;
- class Clock
- {
- public:
- // Clock() = default;
- Clock();
- Clock(int H, int M, int S=0); //構造函數,這樣就可以在構造一個Clock類對象時直接設定時間的默認值
- void set(int H, int M, int S);
- void Show();
- private:
- int h, m, s;
- };
- Clock::Clock(): h(1),m(0),s(0) //冒号後面是初始化列表,相當于就是在函數裡面初始化
- {
- }
- Clock::Clock(int H, int M, int S)
- {
- h = H, m = M, s = S;
- }
-
- void Clock::set(int H, int M, int S)
- {
- h = H, m = M, s = S;
- }
- void Clock::Show()
- {
- cout<<h<<':'<<m<<':'<<s<<endl;
- }
- int main(void)
- {
- Clock k, c(5,0,0);
- k.Show(); //k定義時會調用第一個構造函數,輸出1:00:00
- c.Show(); //c定義時傳遞了3個參數,會調用第二個構造函數,輸出5:00:00
- c.set(8, 30, 30);
- c.Show();
- return 0;
, 更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!