Exemplo

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

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


Solução
Não redefina um novo valor padrão na classe-base. Como funções não-virtuais não devem ser substituídas, fazer uma interface não-virtual indica que o parâmetro padrão não deve ser alterado.

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

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

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