在其派生类C++的构造函数中调用基类的构造函数[重复]

Posted

技术标签:

【中文标题】在其派生类C++的构造函数中调用基类的构造函数[重复]【英文标题】:Calling the constructor of a base class inside the constructor of its derived class C++ [duplicate] 【发布时间】:2017-12-12 04:19:44 【问题描述】:

我正在尝试编写一个将不同类型的蛋糕插入发票的程序,它使用了几个派生类。我想使用派生类的构造函数来初始化抽象父类中的一些数据成员。有没有办法可以做到这一点,以便我可以保持数据成员私有,并在派生类中调用基类构造函数来初始化它们?例如:

class Cake: 
public:
    Cake(string flavor, string frosting) 
        cakeType = flavor;
        frostingType = frosting;
    
private:
    string cakeType;
    string frostingType;
;

class LayerCake: public Cake 
public: 
    LayerCake(string flavor, string frosting, int layers, int 
    quantity) 
        numLayers = layers;
        cakeQuantity = quantity;
        Cake(flavor, frosting);
private:
    int numLayers;
    int cakeQuantity;
;

【问题讨论】:

【参考方案1】:

在构造函数体内,Cake(flavor, frosting);只是构造了一个临时的Cake,与派生类的基类子对象无关。

你想要的是member initializer list,例如

class LayerCake: public Cake 
public: 
    LayerCake(string flavor, string frosting, int layers, int 
    quantity) : Cake(flavor, frosting) 
//            ~~~~~~~~~~~~~~~~~~~~~~~~
        numLayers = layers;
        cakeQuantity = quantity;
    
    ...
;

【讨论】:

如果我使用的是头文件,我是在声明和实现中都使用这种语法,还是只在实现中使用? @Jake 只是实现。

以上是关于在其派生类C++的构造函数中调用基类的构造函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

生成一个派生类对象时,调用基类和派生类构造函数按啥次序

C++入门派生类和基类的构造/析构函数关系

C++基类和派生类的构造函数

C++ ——虚继承时的构造函数

C++ ——虚继承时的构造函数

C++中的派生类,可以不定义对象直接调用基类的成员和调用自己的成员函数嘛???