文法:
virtual 返り値の型 名前( 引数リスト ); virtual 返り値の型 名前( 引数リスト ) = 0;
virtualキーワードは仮想関数を作成するために使用します。仮想関数は派生クラスでオーバーライドすることが可能です。
もしも関数が純粋仮想関数(後ろに = 0が付きます)として定義されている場合には、派生クラスで上書きしなければなりません。
例えば、以下のコードは子クラスがどのようにして親の仮想メソッドをオーバーライドするのか、というのを表現しています。また、仮想関数ではないメソッドがオーバーライドできないというのも示しています:
class Base { public: void nonVirtualFunc() { cout << "親: 非仮想関数" << endl; } virtual void virtualFunc() { cout << "親: 仮想関数" << endl; } }; class Child : public Base { public: void nonVirtualFunc() { cout << "子: 非仮想関数" << endl; } void virtualFunc() { cout << "子: 仮想関数" << endl; } }; int main() { Base* basePointer = new Child(); basePointer->nonVirtualFunc(); basePointer->virtualFunc(); return 0; }
このコードを実行すると、以下の結果が表示されます:
親: 非仮想関数 子: 仮想関数
関連トピック: class