c++ - 在其派生类 C++ 的构造函数中调用基类的构造函数

标签 c++ inheritance constructor

<分区>

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

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

最佳答案

在构造函数体内,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;
    }
    ...
};

关于c++ - 在其派生类 C++ 的构造函数中调用基类的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47765295/

相关文章:

c++ - C++中的双指针引用

c++ - 如何在 C++ 中输出到没有 iostream 的控制台窗口?

c++ - Allegro 获取当前窗口大小

C++虚函数覆盖

c++ - 用不同的对象实例化 C++ Vector

c++ - 能否获取成员函数模板参数的所属对象?

java - 接口(interface)扩展等同于继承吗? ( java )

c# - 强制子类通过父类覆盖祖先的功能

java - 如何使构造函数的排序更加有效?

scala - 如何初始化具有多个操作的字段?