Чистая virtual
функция должна быть реализована в производном типе, который будет непосредственно создан, однако базовый тип все еще может определять реализацию. Производный класс может явно вызывать реализацию базового класса (если это разрешено правами доступа), используя полностью ограниченное имя (вызывая A::f()
в вашем примере - если A::f()
было public
или protected
). Что-то вроде:
class B : public A {
virtual void f() {
// class B doesn't have anything special to do for f()
// so we'll call A's
// note that A's declaration of f() would have to be public
// or protected to avoid a compile time problem
A::f();
}
};
Вариант использования, который я могу придумать, - это когда более или менее разумное поведение по умолчанию, но разработчик класса хочет, чтобы такое поведение по умолчанию вызывалось только явно. Это также может быть случай, когда вы хотите, чтобы производные классы всегда выполняли свою собственную работу, но также могли вызывать общий набор функций.
Обратите внимание, что, хотя это разрешено языком, это не то, что я вижу обычно используемым (и тот факт, что это можно сделать, кажется, удивляет большинство программистов на C ++, даже опытных).
deported
. (либо в .inl, либо в .cpp для ссылки на обычные методы именования файлов).