Test.h
#ifndef _TEST_H_#define _TEST_H_class Test{public: Test(); //構造函數:主要用來初始化函數 //特點:1) 函數名和類名完全相同 // 2) 不能定義構造函數的返回類型,也不能用void // 3) 應聲明為公有函數,使其能夠被調用 // 4) 可以有任意類型和任意個數的參數,一個類可有多個構造函數(重載) // 5) 全局對象的構造函數先于 main函數 // (該類就有2個,其中無參數的稱為:默認構造函數) // (如果未聲明默認構造函數,系統會自動產出一個默認構造函數) //執行時間:在類對象被聲明時立即自動調用 Test(int x, int y, int z);//構造函數重載:雖然函數名相同,但由于 //參數的 個數、類型、順序 不同,會系統會將這些 //函數名相同的函數進行重新命名,從而根據參數進行識別 ~Test();//析構函數:不能有參數 //特點:1) 函數名和類名相同,前面多一個‘~’ // 2) 沒有返回類型 // 3) 沒有參數 // 4) 不能被重載 // 5) 如果沒有定義,系統會自動生成一個默認析構函數,其是一個空函數 //執行時間:在類對象被釋放時調用PRivate: int x_; int y_; int z_;};#endifTest.cpp
#include <iostream>#include "Test.h"using namespace std;Test::Test(){ cout << "Initializing default" << endl;}Test::Test(int x, int y, int z){ x_ = x; y_ = y; z_ = z; cout << "Initliazing " << endl; cout << "x_ = "<< x_ << "/t"; cout << "y_ = "<< y_ << "/t"; cout << "z_ = "<< z_ <<endl;}Test::~Test(){ cout << "Destory test" << endl;}Main.cpp#include "Test.h"using namespace std;Test t0; //全局對象的構造函數先于 main 函數int main(){ cout << "main function" << endl; Test t1; Test t2(1, 2, 3); Test * t3 = new Test(4, 5, 6); //初始化 t3 (此時會調用構造函數) delete t3; //釋放 t3 (此時會調用析構函數) cout << "Delete end" << endl; return 0;}結果為:
總結:1) 構造函數在定義對象時立即調用 (主要用來初始化對象) 2) 析構函數在釋放對象時調用
新聞熱點
疑難解答
圖片精選