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 进行了测试。
编辑:产生了一个澄清
的新问题。结束这个问题。