C++知識點10:建構函式和解構函式
阿新 • • 發佈:2019-01-03
建構函式:
生成物件時呼叫建構函式
生成派生類物件時先呼叫基類建構函式在呼叫派生類建構函式
#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;
}