Ejemplo

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

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


Solución
No redefina un nuevo valor predeterminado en la clase básica. Como las funciones no virtuales no se pueden alterar temporalmente, crear una interfaz no virtual indica que el parámetro predeterminado no se debe cambiar.

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