gpt4 book ai didi

c++ - C++中的多重继承与虚函数

转载 作者:太空狗 更新时间:2023-10-29 20:37:10 25 4
gpt4 key购买 nike

我有这个代码:

class A
{
public:
virtual void FA()=0;
};

class B: public A
{
public:
virtual void FB()=0;
};

class Imp_A: public A
{
public:
void FA()
{
// implement FA
}
};

class Imp_B :public Imp_A, public B
{
public:
void FB()
{
// implement FB by calling FA()
FA();
// do some more work here.
}
};

在类 Imp_B 中,我不想实现 FA,因为它已经在此类基于的 Imp_A 中实现。

但是当我尝试编译我的代码时,我收到错误消息,指出 Imp_B 是虚拟的,无法实例化。

同样,当我尝试在 FB 中调用 FA 时,我收到 FA 不明确的错误。

我该如何解决这个问题?

最佳答案

这看起来像是经典的“菱形继承(钻石问题)问题”,您在基类中定义了一个虚方法,该基类被两个或多个用作多重继承源的其他类继承。

无论如何 - 虚拟继承是您问题的答案

class A
{
public:
virtual void FA()=0;
}

class B: virtual public A
{
public:
virtual void FB()=0; //probably a pure virtual function as well!?
}

class Imp_A: virtual public A
{
public:
void FA()
{
// implement FA
}
}

class Imp_B :public Imp_A, public B //since you call FA() you need it's implementation from Imp_A
{
public:
void FB()
{
// implement FB by calling FA()
FA();
// do some more work here.
}
}

这里的问题是 Imp_b 最终以来自两个 A 类定义的 FA 定义结束;使用虚拟继承有助于解决这个问题。

关于c++ - C++中的多重继承与虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35724158/

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