Возможный дубликат:
Реализация абстрактного класса члены родительского класса
Почему 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'
г++ 4.6.3 говорит:
не может выделить объект абстрактного типа «C», потому что следующие виртуальные функции являются чистыми в «C»: virtual void A::foo()
Я предполагаю, что это разрешено в С#, но я не знаю задействованных механизмов - мне просто любопытно.
template<class Base> struct B: Base{ void foo() {...} };
, а затемstruct C: B<A> {};
. - person leftaroundabout   schedule 10.05.2012