Esempio

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

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


Soluzione
Non ridefinire un nuovo valore predefinito nella classe di base. Poiché le funzioni non virtuali non devono essere sovraccaricate, un'interfaccia non virtuale indica che il parametro predefinito non deve essere modificata.

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){}
};