Przykład

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

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


Rozwiązanie
Nie definiuj ponownie nowej wartości domyślnej w klasie bazowej. Ponieważ funkcje inne niż wirtualne nie powinny być przesłaniane, utworzenie interfejsu niebędącego interfejsem wirtualnym wskazuje, że parametr domyślny nie powinien się zmienić.

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