Я завжди цікавився, чому ми кодуємо
virtual void MyFunction() = 0;
і ні
pure virtual void MyFunction();
Чи є посилання на основу цього рішення?
Я завжди цікавився, чому ми кодуємо
virtual void MyFunction() = 0;
і ні
pure virtual void MyFunction();
Чи є посилання на основу цього рішення?
Відповіді:
Із проектування та еволюції C ++ - Bjarne Stroustrup - Аддісон-Веслі (ISBN 0-201-54330-3) - глава 13.2.3:
Цікавий
= 0синтаксис був обраний через очевидну альтернативу введення нового ключового словаpureабоabstractчерез те, що я не бачив жодного шансу отримати нове ключове слово. Якби я запропонувавpure, випуск 2.0 був би поставлений без абстрактних класів. З урахуванням вибору між приємнішим синтаксисом та абстрактними класами, я вибрав абстрактні класи. Замість того, щоб ризикувати затримкою і зазнавати певних боївpure, я використав традицію C і C ++, щоб використовувати 0, щоб не представляти там .
У будь-якому випадку, дивлячись на стандарт C ++ (§ 9.2 - Члени класу) = 0, називається чисто специфікатором .
pureконтекстне ключове слово, яке ви введете в кінці визначення функції, тож virtual void MyFunction() pureзамість того = 0, щоб перейти разом з finalі override.