Здравствуйте IT, Вы писали:
IT>Здравствуйте Dr_Sh0ck, Вы писали:
DS>>Коллеги, прошу простить мое невежество! Просвятите! Чем отличаются "чисто виртуальные" и "абстрактные" классы (про "чисто абстрактные" слышу впервые; "чисто" — наверное жаргон
). Неужели абстрактные — это те, у которых ВСЕ методы чисто витруальные?
IT>
Абстрактные — это у которых ХОТЯ БЫ ОДИН метод не имеет реализации.
IT>IT>class a {
IT>public:
IT> virtual void f() = 0;
IT>};
IT>
IT>В этом случае экземпляр такого класса не может быть создан. Но от такого класса можно наследоваться и перекрыть эту функцию. Прекрасным примером применения таких классов являются интерфеёсы COM.
Строго говоря, "метод не имеет реализации" и "является чистим виртуальным" — это разные вещи. Никто не запрещает чисто виртуальному методу иметь реализацию:
class a {
public:
virtual void f() = 0
{ ... }
};
Так что правильнее будет сказать, что абстрактным называется класс, у котрого имеется хотя бы один чистый виртуальный метод.
Но это с точки зрения формальной терминологии языка C++. На уровне проектирования абстрактным назвают класс, не предназанченный для самостоятельного инстанциирования (класс, декларирующий интерфейс). Есть ли у него чистые виртуальные методы — неважно.