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"

 

你可能感兴趣的:(C++)