構造函數
1.構造函數與類名相同,是特殊的公有成員函數。
2.構造函數無函數返回類型說明,實際上構造函數是有返回值的,其返回值類型即為構造函數所構建到的對象。
3.當新對象被建立時,構造函數便被自動調用,實例化的每個對象僅調用一次構造函數。
4.構造函數可以被重載(即允許有多個構造函數),重載由不同參數表進行區分,構造時系統按照函數重載規則選擇一個進行執行。
2.構造函數無函數返回類型說明,實際上構造函數是有返回值的,其返回值類型即為構造函數所構建到的對象。
3.當新對象被建立時,構造函數便被自動調用,實例化的每個對象僅調用一次構造函數。
4.構造函數可以被重載(即允許有多個構造函數),重載由不同參數表進行區分,構造時系統按照函數重載規則選擇一個進行執行。
5.如果類中沒有構造函數,則系統會給出一個缺省的構造函數: 類名(){}
6.
只要我們定義了構造函數,則系統便不會生成缺省的構造函數。
7.構造函數也可在類外進行定義。
8.
若構造函數是無參的或者各個參數均有缺省值,C++編譯器均認為是缺省的構造函數。但是注意,
缺省的構造函數只允許有一個。
析構函數
1.析構函數無返回值無參數,其名字與類名相同,只在類名前加上~, 即: ~類名(){.......}
2.析構函數有且只有一個
3.對象注銷時自動調用析構函數,先構造的對象后析構
2.析構函數有且只有一個
3.對象注銷時自動調用析構函數,先構造的對象后析構
//Test1.h
#include<iostream> using namespace std; class Test { private: long b; char a; double c; public: Test(); //Test(char a = 0); //無參數的和各個參數均有缺省值的構造函數均被認為是缺省構造函數,缺省構造函數只能存在一個 Test(char a); Test(long b, double c); //參數列表不同的構造函數的重載 ~Test() //析構函數有且只能有一個,析構順序為先構造的后析構 { cout<<"The Test was free."<<this<<endl; } void print(); }; Test::Test() { cout<<"The Test was built."<<this<<endl; this->a = 0; this->b = 0; this->c = 0; } Test::Test(char a) { cout<<"The Test was built."<<this<<endl; this->a = a; } Test::Test(long b, double c) { cout<<"The Test was built."<<this<<endl; this->a = '0'; this->b = b; this->c = c; } void Test::print() { cout<<"a = "<<this->a<<" b = "<<this->b<<" c = "<<this->c<<endl; }
//Test.cpp
#include<iostream> #include"Test1.h" using namespace std; void main() { Test bt; bt.print(); Test bt1('a'); bt1.print(); Test bt2(3,7); bt2.print(); }
運行結果