構造函數基本概念
知識
07-10
構造函數:
作用:在對象被創建時使用特定的值構造對象,將對象初始化為一個特定的初始狀態
要求:函數名=類型名,不能定義返回值類型,也不能有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;


※TensorFlow 數據讀取
※模塊化方式構建Node.js應用程序
TAG:程序員小新人學習 |