C++虚函数的陷阱

时间:2021-02-20 04:27:46

首先看一段代码:

 class B
{
public:
virtual void fun(int i = )
{
std::cout << "base fun called, " << i;
};
}; class D : public B
{
private:
virtual void fun(int i = )
{
std::cout << "driver fun called, " << i;
};
};

如果进行如下操作:

B* p = new D();    
p->fun();    
会输出 driver fun called, 1

这里出现了两个问题:

(1)子类的虚函数即使被声明为私有函数,仍然被外部调用了。

(2)虚函数虽然是动态绑定的,但缺省的参数值确是静态绑定的。

这两点一定要注意啊!!