Чистые виртуальные функции - это те функции-члены, которые являются виртуальными и имеют чистый спецификатор ( = 0;
)
Пункт 10.4 параграфа 2 C ++ 03 сообщает нам, что такое абстрактный класс, и, в качестве примечания, следующее:
[Примечание: объявление функции не может содержать как чистый спецификатор, так и определение —Конечное примечание] [Пример:
struct C {
virtual void f() = 0 { }; // ill-formed
};
—конечный пример]
Для тех, кто не очень знаком с проблемой, обратите внимание, что чистые виртуальные функции могут иметь определения , но вышеупомянутый пункт запрещает такие определения должны отображаться встроенными (лексически внутри класса). (Для определения чистых виртуальных функций вы можете увидеть, например, this GotW )
Теперь для всех других видов и типов функций разрешено предоставлять определение внутри класса, и это ограничение кажется на первый взгляд абсолютно искусственным и необъяснимым. Если подумать, это кажется таковым на второй и последующие взгляды :) Но я считаю, что ограничения не было бы, если бы для этого не было конкретной причины.
Мой вопрос: знает ли кто-нибудь те конкретные причины? Хорошие догадки также приветствуются.
Примечания:
inline
в этом вопросе не относится к ключевому слову inline . Предполагается, что это означает лексически в классе