C++ 多态之继承4-派生类的构造函数以及初始化

本文深入探讨了C++中派生类构造函数的细节,特别是如何在初始化派生类时正确处理基类的构造。在创建派生类对象时,基类的构造函数先被调用,然后才是派生类构造函数。C++不允许直接在派生类构造函数的初始化列表中初始化基类成员,而是通过调用基类的特定构造函数来完成初始化,以确保const和引用变量的正确处理。在析构过程中,调用次序则与构造函数相反,从最底层的派生类开始向上回溯。
摘要由CSDN通过智能技术生成

之前的两篇文章,我们已经了解了C++中继承的一些基本知识,也探索了初始化派生类的次序。本文主要是更深入的了解构造函数所扮演的角色(初始化一个派生类时)。我们继续沿用上篇文章的例子。

class Base
{
public:
    int m_nValue;
 
    Base(int nValue=0)
        : m_nValue(nValue)
    {
    }
};
 
class Derived: public Base
{
public:
    double m_dValue;
 
    Derived(double dValue=0.0)
        : m_dValue(dValue)
    {
    }
};

初始化非派生类时,构造函数只需要关心它自己的成员。例如,

int main()
{
    Base cBase(5); // use Base(int) constructor
 
    return 0;
}
当cBase被实例化时,发生如下事件:

1.为cBase预留内存

2.合适的Base构造函数被调用

3.初始化列表对变量进行初始化

4.执行构造函数的函数体

5.从调用出返回

这个过程非常的直观。但是换成初始化一个派生类时,事情变得稍微复杂点:

int main()
{
    Derived cDerived(1.3); // use Derived(double) constructor
 
    return 0;
}
当cDerived被实例化时,发生了如下事情:

1.为cDerived预留足够的内存(包括Base部分以及Derived部分)

2.合适的派生类构造函数被调用

3.Base对象被首先构造通过合适的Base构造函数

4.初始化列表对变量进行初始化

5.执行构造函数的函数体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值