切勿重新定义继承来的带缺省参数的函数。我们知道,继承来的函数是virtual 的,至于原因在上一节中已经说明了,即“切勿重新定义父类non-virtual函数”。所以确切的描述应该是“切勿重新定义继承来的带缺省参数的virtual函数”。因为缺省参数是静态绑定,而virtual是动态绑定。
typedef enum _ColorEnum{ eRed = 1, eYellow, eBlack }ColorEnum; class BaseOption { public: BaseOption(void); ~BaseOption(void); virtual void Function(ColorEnum color = eYellow); }; void BaseOption::Function(ColorEnum color) { cout<<"BaseOption::Function():"<<color<<endl; } class SubOption : public BaseOption { public: SubOption(void); ~SubOption(void); void Function(ColorEnum color); }; void SubOption::Function(ColorEnum color) { cout<<"SubOption::Function()"<<color<<endl; } int main(){ SubOption obj; BaseOption *pBase = &obj; SubOption *pSub = &obj; pBase->Function(); //pSub->Function();//error, can‘t find. } output: "SubOption::Function() 2"