Почему производный класс не может вызвать конструктор прародителя в своем списке инициализации? - PullRequest
0 голосов
/ 07 февраля 2019

Скажем, у меня есть три класса:

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{...}

, то, поскольку бигль "является млекопитающим" (в отличие от ребенка не обязательно является прародителем),Я бы предположил, что между ними есть связь, так что один (второй производный класс) должен иметь возможность общаться с классом предка .... Нет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...