示例

class Base {
public:
virtual void fnc(int param = 0);
};

class Derived: public Base {
public:
void fnc(int param = 1){}
};


解决方案
不要在基类中重新定义新缺省值。由于不应覆盖非虚函数,因此使用非虚接口表示不应更改缺省参数。

class Base {
public:
void fnc(int param = 0){
fncWork(param);
}

private:
virtual void fncWork(int param);
};

class Derived: public Base {
private:
virtual void fncWork(int param){}
};