Это зависит. Если обе функции имеют одинаковую подпись, и вы хотите
замените их обоих на одну и ту же функцию, затем просто сделайте это; есть
нет проблем, и ваша функция будет реализовывать оба из них. Если у них есть
разные подписи, тогда вам понадобятся две разные функции для
реализовать их. И если вы хотите разные реализации (скорее всего,
случай, если интерфейсы не связаны), но они имеют одинаковую подпись,
тогда вам нужно будет ввести промежуточные классы, чтобы «переименовать» их,
e.g.:
class MaskSetVisibleInAaa : public Aaa
{
virtual void setVisibleInAaa( bool ) = 0;
virtual void setVisible( bool newStatus )
{
setVisibleInAaa( newStatus );
}
};
class MaskSetVisibleInBbb : public Bbb
{
virtual void setVisibleInBbb( bool ) = 0;
virtual void setVisible( bool newStatus )
{
setVisibleInBbb( newStatus );
}
};
class ConcreteImplementation
: public MaskSetVisibleInAaa
, public MaskSetVisibleInBbb
{
virtual void setVisibleInAaa( bool );
virtual void setVisibleInBbb( bool );
};
(Я бы также поставил под сомнение использование вами "faux-интерфейса". C ++ полностью поддерживает
реальные интерфейсы - более того, чем некоторые другие языки, которые
иметь ключевое слово interface
. Интерфейс определяет контракт; который,
если язык не имеет специальной поддержки программирования по контракту,
в большинстве случаев подразумевает конкретный код в интерфейсе, с виртуальным
функции являются частными.)