重複の可能性:
親クラスに抽象クラス メンバーを
実装する C++ では、基底クラスが派生クラスの継承されたインターフェイスを実装できないのはなぜですか?
これらのオブジェクトを考慮する:
struct A
{
virtual void foo() = 0;
};
struct B
{
void foo() { /* neat implementation */ }
};
なぜ -- コンパイラの観点から -- 次のオブジェクトが抽象的と見なされるのか疑問に思います。
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#で許可されていると思いますが、関連するメカニズムはわかりません-興味があるだけです。