Чиста 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, щоб посилатися на загальні практики іменування файлів).