car*_*995 8 c++ constructor diamond-problem
守则如下:
#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
};
Run Code Online (Sandbox Code Playgroud)
1.)如果实例化Unknown类,我将如何初始化所有超类?由于只创建一个Animal实例,我怎样才能避免mysef必须两次调用它的构造函数?
谢谢
Jam*_*lis 13
派生程度最高的类初始化任何虚拟基类.在类层次结构中,Unknown
必须构造虚拟Animal
基类(例如,通过添加Animal(a)
到其初始化列表).
构造Unknown
对象时,既Fish
不会也Bird
不会调用Animal
构造函数. Unknown
将调用Animal
虚拟基础的构造函数.