虚函数可以有默认实参,如果一个调用省略了默认值的实参,则所用值由调用函数类型决定,与对象的动态类型无关。
如果基类和派生类使用不同的默认实参会引起麻烦。原因在于这个值是在编译时确定,而且只与调用函数的类型有关,而和动态类型无关。也就是说,当动态绑定发生的时候,想要使用派生类中的默认实参,是使用的确实基类的!
class Base{
public:
virtual void play(int i = 1)const//虚函数可以有默认实参
{
cout << i <<endl;
}
};
class Derived:public Base{
public:
void play(int i = 2)const
{
cout << i <<endl;
}
};
void play (const Base& CBase)//如果一个调用省略了默认值的实参,则所用值由调用函数类型决定
{
CBase.play();
}
int main()
{
Base CBase;
Derived CDerived;
play(CDerived);
system("pause");
return 0;
}
答案是1
http://blog.youkuaiyun.com/sjyzhxw/article/details/7585857
http://blog.youkuaiyun.com/hw_henry2008/article/details/6439128