【发布时间】:2023-12-05 12:38:01
【问题描述】:
考虑以下代码:
#include <iostream>
class A
{
public:
virtual void f() = 0;
virtual void g() = 0;
};
class B : virtual public A
{
public:
virtual void f()
{
g();
}
};
class C : virtual public A
{
public:
virtual void g()
{
std::cout << "C::g" << std::endl;
}
};
class D : public C, public B
{
};
int main()
{
B* b = new D;
b->f();
}
下面程序的输出是C::g。
编译器如何调用B类的姐妹类的函数??
【问题讨论】:
-
别这样,这就是所谓的死亡钻石,见en.wikipedia.org/wiki/Multiple_inheritance
-
我知道它是什么,我想知道它是如何工作的。
-
如果您解释了为什么您认为它不会那样工作,这可能会有所帮助。把
main的第一行改成A* b = new D;,你是不是也会一头雾水? -
@Bernhard "不要这样做" 为什么不呢?
-
@curiousguy 查看我发布的链接
标签: c++ inheritance multiple-inheritance overriding virtual-inheritance