基本クラスで仮想関数を定義したら、派生クラスではその関数に、virtual
を付ける必要はありません。付けなくても、自動的に仮想関数になります。
#include <iostream> struct Base { virtual void f() { std::cout << "Base" << std::endl; } }; struct Derived : Base { void f() override { std::cout << "Derived" << std::endl; } }; int main() { Derived d; Base& b = d; b.f(); }
出力:
Derived
C++03においては、派生クラスでも「この関数はオーバーライドを意図してるんだ」というのを示すためにvirtual
を付けることに意義がありました。
C++11ではoverride
キーワードを使えばその意図は示せるので、派生クラスの仮想関数にvirtual
を付ける必要はありません。