条款36:绝不重新定义继承而来的non-virtual函数

/********************************************
class B
{
public:
void mf();
};
class D : public B
{
public:
void mf();
};
D x;
B* pb = &x;
D* pd = &x;


pb->mf(); //调用的是B::mf();
pd->mf(); //调用的是D::mf();


//non-virtual函数都是静态绑定,意即pointer-to-B永远调用的是B::mf(), pointer-to-D永远调用的是D::mf();
//而virtual函数都是动态绑定,所以它们没有这个问题,如果mf声明为virtual函数则没有这个问题
//non-virtual的不变性凌驾于特异性
*********************************************/

猜你喜欢

转载自blog.csdn.net/u010731020/article/details/81035843