首页 > 代码库 > c++ 切勿重新定义继承来的带缺省参数的函数

c++ 切勿重新定义继承来的带缺省参数的函数

 切勿重新定义继承来的带缺省参数的函数。我们知道,继承来的函数是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"