转自:http://blog.csdn.net/xhu_eternalcc/article/details/21601477
#include<iostream>
using namespace std;
class Base{
public:
virtual void show(int i=10){
cout<<"Base show i="<<i<<endl;
}
virtual ~Base(){}
};
class Derived:public Base{
public:
virtual void show(int i=20){
cout<<"Derived show i="<<i<<endl;
}
virtual ~Derived(){}
};
int main(){
Base* bp=new Derived();
bp->show();//此处可以不指定参数值,因为动态绑定下这个函数会从其base继承缺省参数值,
//但是如果是Derived d;b.show();或者Derived d; Derived *p = &d;d->show();都会报错,因为静态绑定下未指定参数
}
输出:Derived show i=10
深入理解,其实这就是违背违背 Effective C++的条款37:绝不重新定义继承而来的缺省参数值 的后果,还有一点需要注意,如果父类中的虚函数给出默认参数,而子类中的相应函数没有默认参数,那么如果通过子类对象(不是引用或指针)来访问该函数的话,必须指定实参。