Чистые виртуальные методы всегда существовали в C ++? - PullRequest
1 голос
/ 17 июня 2019

Я нашел некоторый код в рабочем проекте, который выдает ошибки, когда дочерний класс не переопределяет функцию базового класса (по сути, базовые классы, которые используют эту утилиту, фактически являются абстрактными).Когда я увидел это, моей первой реакцией было: «Почему они просто не делают эти методы чисто виртуальными?»Тем не менее, рассматриваемому коду около 15 лет, и я не был уверен, был ли он создан, чтобы заполнить пробел, который чистый виртуальный заполнит позже (при условии, что он не существовал в то время).

  • Если с тех пор существуют чисто виртуальные методы, есть ли причина предоставлять им дополнительную или альтернативную функциональность?(Я понимаю, что это может быть субъективно, но у меня даже нет здесь отправной точки).

  • Если нет, есть ли документация, которая указывает, какой стандарт ввел их?

1 Ответ

6 голосов
/ 17 июня 2019

Чистые виртуальные функции (всегда) существовали со времени первого официального стандарта C ++ 98 (и, вероятно, ранее).

См. ИСО / МЭК 14882: 1998 [class.abstract]

Класс является абстрактным, если он имеет хотя бы одну чисто виртуальную функцию .

Продолжая копать, в книге Страуструпа «История C ++: 1979–1991» ( pdf ) он упоминает, что абстрактные классы появились в 1989 году. Сказав

«Самой последней функцией, добавленной в 2.0 до ее отправки, были абстрактные классы»

...