C++(二十六) — 構造函數、析構函數、對象數組
阿新 • • 發佈:2018-12-28
style 空間 數組 註意 默認 全部 訪問類 類名 生成
1、構造函數
(1)每個類都要定義它自己的構造函數和析構函數,是類的成員函數。
特點:名稱與類名相同;沒有返回值;一定是共有函數,可以直接訪問類內所有成員函數;可以帶默認形參,可以重載;
class clock { public: // 無參構造函數 clock() { cout << "無參構造函數" << endl; } // 有參構造函數 clock(int h, int m , int s) { hour = h; minute = m; second= s; cout << "有參構造函數" << endl; } //// 有默認參數值的有參構造函數 //clock(int h=8, int m=20, int s=20) //{ // hour = h; // minute = m; // second = s; // cout << "有默認參數值的有參構造函數" << endl; //} //拷貝構造函數完成,用一個對象初始化另一個對象 clock(const clock &t) // const 加不加都可以{ cout << "復制構造函數" << endl; } private: int hour; int minute; int second; }; void main() { clock myclock; // 調用無參構造函數 //clock myclock_1();// 調用有參構造函數,此時會出錯,因為沒有傳參數 clock myclock_2(8,20,20);// 有參構造函數,必須要寫上參數 clock myclock_3(myclock_2);// 調用復制構造函數 system("pause"); }
(2)註意:
(1)類中沒有定義任何構造函數時,才使用默認構造函數;
(2)不能同時出現,無參構造函數和帶有全部默認參數值的構造函數;二者只能出現一個;
(3)復制構造函數,使用一個已存在的對象,初始化一個新的同類對象。如果未定義,系統將會自動生成;但是,如果申請動態空間(堆空間),則必須定義。
2、對象數組
解釋為什麽需要構造函數,在定義對象數組時,自動初始化。
class student { public: student(int, char*); student(); ~student(); void set(int i, char* c); void printstu() { cout << "id: " << id << " name: " << name << setw(5) << endl; } private: int id; string name; }; student::student() { cout << "默認無參構造函數" << endl; } student::student(int i, char* c) { id = i; name = c; cout << "有參構造函數" << endl; } student::~student() { cout << "析構函數" << endl; } void student::set(int i, char* c) { id = i; name = c; } void main() { // 對象數組 student stu[5] = { student(1,"li"), student(2,"wang") }; stu[2].set(3, "zhao"); system("pause"); }
定義兩個構造函數,此時定義對象數組時,可以不用初始化。
構造函數在定義對象時調用,析構函數在程序結束時調用,而且,析構順序與構造順序相反。
C++(二十六) — 構造函數、析構函數、對象數組