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.