为什么派生类不能在其初始化列表中调用祖父母构造函数?

时间:2019-02-07 19:13:09

标签: c++ inheritance constructor

说我有三节课:

class Grandparent {
private:
    int gi;
    float gf;
public:
    Grandparent(int i1, float f1) : gi(i1), gf(f1) {}
}

class Parent : public Grandparent {
private:
    int pi;
    float pf;
public:
    Parent(int i1, float f1, int i2, float f2) : Grandparent(i1, f1), pi(i2), pf(f2) {}
}

class Child : public Parent {
private:
    int ci;
    float cf;
public:
    Child(int i1, float f1, int i2, float f2, int i3, float f3) :
        Parent(i1, f1, i2, f2), ci(i3), cf(f3) {}
}

是否可以从孩子内部初始化祖父母?

我认为如果我写

Child(int i1, float f1, int i2, float f2, int i3, float f3) :
    Grandparent(i1, f1), ci(i3), cf(f3) {}

然后它将不起作用,因为我没有在任何地方初始化Parent对象(如果这不是原因,或者有更多问题,请告诉我)。

但是,如果我更抽象地考虑派生类,例如

class Mammal{...}
class Dog: public Mammal{...}
class Beagle: public Dog{...}
然后,由于小猎犬“是哺乳动物”(相对于孩子不一定是祖父母),我认为它们之间存在某种关系,因此一个(第二派生类)应该能够与祖先课。...不?

0 个答案:

没有答案