C++派生类中如何初始化基类对象

本文讨论了在C++派生类中如何正确初始化和析构基类对象。在成员初始化列表中初始化派生类私有成员时,必须显式调用基类构造函数,否则会导致编译错误。派生类析构函数会自动调用基类析构函数,无需手动调用。同时,文章通过代码示例探讨了在派生类构造函数中使用`new`分配基类对象的情况,以及内存分配和连续性的问题。
摘要由CSDN通过智能技术生成

今天收到盛大的面试,问我一个问题,关于派生类中如何初始化基类对象,我在想派生类对于构造函数不都是先构造基类对象,然后在构造子类对象,但是如果我们在成员初始化列表先初始化派生类的私有成员,在函数内去调用基类的构造函数,能编译通过吗?或者当我们定义了基类的默认构造函数,而没有去在派生类的构造函数中显示的去调用基类的构造函数,会出现什么状况,我想派生类肯定会自动去调用基类的默认构造函数,那么析构函数又怎么样呢?我们都知道派生类的析构函数会先被调用,然后基类的析构函数后被调用,但是我不知道我们是否需要在派生类的析构函数中显示的去调用基类的析构函数吗?这个有待我去验证。

代码一:在派生类中成员初始化列表先初始化派生类的私有成员,不显示的调用基类的构造函数

#include <iostream>
using namespace std;

class Base
{
private:
    int n;

public:
    Base(int m):n(m){ cout<<"constructor is called\n";}
    ~Base(){}
};

class Derive:public Base
{
private:
    int n;

public:
    Derive(int m):n(m)
    {
    }
    ~Derive(){}
};

int main()
{
    Derive* a = new Derive(10);return 0;
}

结果:编译错误,error C2512: “Base”: 没有合适的默认构造函数可用

 

代码二:在派生类中成员初始化列表先初始化派生类的私有成员,显示的调用基类的构造函数

#include <iostream>
using namespace std;

class Base
{
private:
    int n;

public:
    Base(){ cout<<"default constructor is called\n"; n = 8;}
    Base(int m):n(m){ cout<<"constructor is called\n";}
    ~Base(){}
};

class Derive:public Base
{
private:
    int n;

public:
    Derive(int m):Base(m),n(m)
    {
    }
    ~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值