1. 程式人生 > >C++知識點10:建構函式和解構函式

C++知識點10:建構函式和解構函式

建構函式:

生成物件時呼叫建構函式
生成派生類物件時先呼叫基類建構函式在呼叫派生類建構函式

#include <iostream>
using namespace std;

class base
{
public:
    base(){cout<<"base"<<endl;}
    virtual ~base(){}
};

class derived:public base
{
public:
    derived(){cout<<"derived"<<endl;}
    ~derived(){}
};
int main()
{
    base
*point=new derived(); return 0; }

輸出結果為:
base
derived

解構函式:

撤銷物件時呼叫解構函式
撤銷派生類物件時,先呼叫派生類的解構函式再呼叫基類的解構函式。

#include <iostream>
using namespace std;

class base
{
public:
    base(){}
    //virtual ~base(){}
    ~base(){cout<<"base"<<endl;}
};

class derived:public base
{
public
: derived(){} ~derived(){cout<<"derived"<<endl;} }; int main() { derived *p=new derived; delete p; return 0; }

輸出結果為:
derived
base

虛擬的解構函式:

基類指標指向派生類物件時,撤銷指標
當基類解構函式不叫virtual關鍵字,則下列程式碼輸出結果為base(只調用基類解構函式)

#include <iostream>
using namespace std;

class base
{ public: base(){} ~base(){cout<<"base"<<endl;}//正常的解構函式 }; class derived:public base { public: derived(){} ~derived(){cout<<"derived"<<endl;} }; int main() { base *point=new derived(); delete point; return 0; }

基類指標指向派生類物件時,
當基類解構函式加virtual關鍵字時,撤銷指標先呼叫派生類解構函式再呼叫基類解構函式
輸出結果:
derived
base

#include <iostream>
using namespace std;

class base
{
public:
    base(){}
    virtual ~base(){cout<<"base"<<endl;}//虛擬的解構函式
};

class derived:public base
{
public:
    derived(){}
    ~derived(){cout<<"derived"<<endl;}
};
int main()
{
    base *point=new derived();
    delete point;
    return 0;
}