Кодекс выглядит следующим образом:
#include <iostream>
using namespace std;
class Animal{
int a;
public:
Animal(int a) : a(a){}
int geta(){return a;}
};
class Bird : virtual public Animal{
string b;
public:
Bird(int a , string b) : Animal(a) , b(b){}
};
class Fish : virtual public Animal{
int f;
public:
Fish(int a , int f) : Animal(a) , f(f){}
};
class Unknown : public Bird, public Fish{
char u;
public:
Unknown(int a , int f , string b , char u )
: Bird(a , b) , Fish(a , f) , u(u){} //Problem
};
1.) Как я собираюсь инициализировать весь суперкласс, если создается экземпляр класса Unknown? Так как будет создан только один экземпляр Animal, как я могу избежать того, что mysef придется дважды вызывать его конструктор?
Спасибо
Самый производный класс инициализирует любые виртуальные базовые классы. В вашей иерархии классов, Unknown
должен построить виртуальный Animal
базовый класс (например, путем добавления Animal(a)
в его список инициализации).
При построении Unknown
объект, ни Fish
ни Bird
позвоню Animal
конструктор. Unknown
вызовет конструктор для Animal
виртуальная база.
Других решений пока нет …