struct B {
virtual void foo ()
{ cout << "B::foo()\n"; }
};
struct D : B {
void foo () //final
{ cout << "D::foo()\n"; }
};
int main ()
{
B *pB = new B;
D *pD = static_cast<D*>(pB);
pB->foo();
pD->foo();
}
予想される動作を出力します。
B::foo()
B::foo()
D::foo()
ファイナルを作成すると、出力は快適に異なります。
B::foo()
D::foo()
これは、virtual
そのメソッドが として宣言されているクラスのポインター/参照でメソッドが呼び出されたときに、機能が開始されないことを意味しますfinal
。
またfinal
、コンパイル時のチェックだけでなく、実行時の動作にも寄与することを意味します。
これはすべてのコンパイラの標準的な動作ですか。g++4.7 でテストしました。
編集:明確化し
て新しい質問を作成しました。この質問を閉じます。