просто сделайте базовый класс private
, protected
(по умолчанию это private
при использовании class
, пока все в порядке) и не используйте, но переопределяйте функцию в производном классе
class Bar: private Foo
{
public:
int fn() {return Foo::fn();}
};
Это сделает только int fn()
видимыми в баре и not int fn(int)
. Конечно, компилятор громко закричит, что fn не является виртуальной функцией, но вы все равно переопределяете ее, но пока он вызывает только функцию в базовом классе, все равно.