缺省参数是静态绑定的。所以,永远记住:
绝不重新定义继承而来的缺省参数
举例:
class A
{
public:
virtual void func(int val = 1)
{ std::cout<<"A->"<<val <<std::endl;}
virtual void test()
{ func();}
};
class B : public A
{
public:
void func(int val=0)
{std::cout<<"B->"<<val <<std::endl;}
};
int main(int argc ,char* argv[])
{
B*p = new B;
p->test();
return 0;
}
B*p = new B;
先调用A的构造函数然后调用B的构造函数
p->test();
调用A中的test()
然后调用A中的func()
但是由于缺省参数是静态绑定的所以val的默认值仍然是B中func()的初始值1。
所以输出的结果是B->1.