Re[5]: virtual base class для чего обычно юзается?
От: Андрей Тарасевич Беларусь  
Дата: 20.01.02 09:33
Оценка:
Здравствуйте 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++. На уровне проектирования абстрактным назвают класс, не предназанченный для самостоятельного инстанциирования (класс, декларирующий интерфейс). Есть ли у него чистые виртуальные методы — неважно.
Best regards,
Андрей Тарасевич
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.