Я завжди цікавився, чому ми кодуємо
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
.