gpt4 book ai didi

c++ - 抽象基类继承不明确 :

转载 作者:可可西里 更新时间:2023-11-01 15:19:31 24 4
gpt4 key购买 nike

我有一个比这复杂得多的类结构,但将问题归结为它的本质,这描述了我的场景:我有两个类 A 和 B,它们实现了共享一个共同祖先的纯虚拟基类,并且然后是一个由A&B组成的第三个类C。最后是一个模板类,在纯虚基类中填充了公共(public)方法:

struct I {
virtual void r()=0;
};

struct A : I {};
struct B : I {};

struct C : A, B {
void q(){
r(); // the problem is here.
}
};

struct D : C {
virtual void r(){
}
};

C* c = new D;
c->q();

我的问题是,我看不出有什么方法可以让 C::q 调用 r()。

void C::q(){
r(); // is ambiguous
A::r(); // is pure virtual
B::r(); // also is pure virtual
D::r(); // C doesn't know about D
((D*)this)->r(); // is dubious and requires C to know about D.
}

如何从 C 调用 r() 方法,以便调用正确的虚方法?


抱歉,我应该澄清这里不能使用虚拟继承。我找到了两个解决方案:

struct C : A, B {
virtual void r()=0;
...

struct C : A, B {
using A::r;
...

两者似乎都足以消除对 r() 的调用的歧义,以便解决所有问题。

最佳答案

在 C 中将方法 r 重新声明为纯虚拟:

struct C : A, B {
void q(){
r(); // the problem is here.
}

virtual void r()=0;
};

关于c++ - 抽象基类继承不明确 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4283792/

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