Dlaczego nie mogę użyć dziedziczenia do zaimplementowania interfejsu w C ++? [duplikować]

Możliwy duplikat:
Implementowanie abstrakcyjnych członków klasy w klasie nadrzędnej
Dlaczego C ++ nie pozwala klasom bazowym zaimplementować dziedziczonego interfejsu klasy pochodnej?

Biorąc pod uwagę te obiekty:

<code>struct A
{
    virtual void foo() = 0;
};

struct B
{
    void foo() { /* neat implementation */ }
};
</code>

Zastanawiam się, dlaczego - compiler-wise - następujący obiekt jest uważany za abstrakcyjny:

<code>struct C : B, A
{
    using B::foo; // I tried my best to make the compiler happy
};
</code>

Kompilator nie pozwoli mi tego zrobić:

<code>A* a = new C;
</code>

Visual Studio 2010 mówi:

„C”: nie można utworzyć instancji klasy abstrakcyjnej z powodu następujących członków: „void A :: foo (void)”: jest abstrakcyjne: patrz deklaracja „A :: foo”

g ++ 4.6.3 mówi:

nie można przydzielić obiektu typu abstrakcyjnego „C”, ponieważ następujące funkcje wirtualne są czyste w obrębie „C”: virtual void A :: foo ()

Domyślam się, że jest to dozwolone w języku C #, ale nie znam zaangażowanego mechanizmu (ów) - jestem po prostu ciekawy.

questionAnswers(4)

yourAnswerToTheQuestion