Я всегда задавался вопросом, почему мы кодируем
virtual void MyFunction() = 0;
и нет
pure virtual void MyFunction();
Есть ли ссылка на основу этого решения?
Я всегда задавался вопросом, почему мы кодируем
virtual void MyFunction() = 0;
и нет
pure virtual void MyFunction();
Есть ли ссылка на основу этого решения?
Ответы:
Из Проекта и Развития C ++ - Бьярн Страуструп - Аддисон-Уэсли (ISBN 0-201-54330-3) - глава 13.2.3:
Любопытный
= 0
синтаксис был выбран вместо очевидной альтернативы введения нового ключевого словаpure
илиabstract
потому, что в то время я не видел шансов получить новое ключевое слово принятым. Если бы я предложилpure
, релиз 2.0 был бы поставлен без абстрактных классов. Учитывая выбор между более приятным синтаксисом и абстрактными классами, я выбрал абстрактные классы. Вместо того, чтобы рисковать задержкой и нести определенные боиpure
, я использовал традицию C и C ++, заключающуюся в использовании 0 для представления не там .
В любом случае рассмотрение стандарта C ++ (§ 9.2 - члены класса) = 0
называется pure-specifier .
pure
контекстную ключевое слово вы положили в конце определения функции, поэтому virtual void MyFunction() pure
вместо того = 0
, чтобы идти вместе с final
и override
.