考虑这些对象:
struct A
{
virtual void foo() = 0;
};
struct B
{
void foo() { /* neat implementation */ }
};
我想知道为什么 --compiler-wise -- 以下对象被认为是抽象的:
struct C : B, A
{
using B::foo; // I tried my best to make the compiler happy
};
编译器不允许我这样做:
A* a = new C;
Visual Studio 2010 说:
“C”:由于以下成员,无法实例化抽象类:“void A::foo(void)”:是抽象的:参见“A::foo”的声明
g++ 4.6.3 说:
无法分配抽象类型“C”的对象,因为以下虚函数在“C”中是纯的:virtual void A::foo()
我想这在 C# 中是允许的,但我不知道所涉及的机制——我只是好奇。