gpt4 book ai didi

c++ - 菱形继承(钻石问题)最低基类构造函数

转载 作者:可可西里 更新时间:2023-11-01 17:37:13 28 4
gpt4 key购买 nike

代码如下:

代码:

#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 类,我该如何初始化所有父类(super class)?由于只会创建一个 Animal 实例,我如何才能避免 mysef 不得不调用其构造函数两次?

谢谢

最佳答案

最派生类初始化任何虚基类。在您的类层次结构中,Unknown 必须构造虚拟 Animal 基类(例如,通过将 Animal(a) 添加到其初始化列表中)。

当构造一个Unknown 对象时,FishBird 都不会调用Animal 构造函数。 Unknown 将调用 Animal 虚拟基地的构造函数。

关于c++ - 菱形继承(钻石问题)最低基类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12500230/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com