首先看一段代码:
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)虚函数虽然是动态绑定的,但缺省的参数值确是静态绑定的。
这两点一定要注意啊!!