我想知道" 虚拟基类 "是什么以及它意味着什么.
让我举个例子:
class Foo
{
public:
void DoSomething() { /* ... */ }
};
class Bar : public virtual Foo
{
public:
void DoSpecific() { /* ... */ }
};
Run Code Online (Sandbox Code Playgroud) struct level0
{
virtual void foo() = 0;
};
struct level1 : level0
{
virtual void foo() { cout <<" level1 " << endl; }
};
struct level2 : level1
{
virtual void foo() { cout <<" level2 " << endl; }
};
struct level3 : level2
{
using level1::foo;
};
int main()
{
level1* l1 = new level3;
l1->foo();
level3 l3;
l3.foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码使用gcc给出
level2
level1
Run Code Online (Sandbox Code Playgroud)
但在icc给出
level2
level2
Run Code Online (Sandbox Code Playgroud)
哪一个是正确的还是标准不确定?
编辑:这证明确实存在错误,请考虑以下主要功能
int main()
{
level3 l3;
l3.foo(); …Run Code Online (Sandbox Code Playgroud) 我有以下内容:
class Abstract
{
virtual void AbstractMethod() = 0;
};
class Implementer
{
void AbstractMethod() {};
};
class Concrete : public Abstract, private Implementer
{};
Run Code Online (Sandbox Code Playgroud)
我无法实例化,Concrete因为AbstractMethod不会覆盖纯虚方法.我究竟做错了什么?
c++ inheritance multiple-inheritance pure-virtual private-inheritance