【发布时间】:2012-07-12 15:42:00
【问题描述】:
#include <iostream>
struct B1
{
virtual void method()=0;
virtual ~B1(){}
};
struct B2
{
virtual void method()=0;
virtual ~B2(){}
};
struct D: B1, B2
{
virtual void method()
{
std::cout << "D::method\n";
};
};
int main(int argc,char *argv[])
{
D d;
B1 &b1=d;
B2 &b2=d;
b1.method();
b2.method();
return 0;
}
注意,B1 和 B2 不共享公共接口。
这合法吗?如果是 - 在哪个标准中? C++98/03/11 ?
msvc和gcc都编译OK了。
以前我认为,我必须为这种情况使用一些通用接口(可能的虚拟继承)。
这种情况有什么特别的名字吗?
请详细说明它是如何工作的?也许是一些 ISO 参考资料?
【问题讨论】:
-
如果您解释是什么导致您认为这是一个特殊情况,那么有人可能会找到一个很好的解释。
-
因为在这种情况下,我希望在 D: B1::method 和 B2::method 中有两个不同的独立继承虚函数。
标签: c++ overriding virtual multiple-inheritance