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;
}

猜你喜欢

转载自blog.csdn.net/htt789/article/details/81068394
今日推荐