Wie schon angedeutet kann es bei mehrfacher Vererbung zu Problemen kommen, die mitunter nicht leicht zu lösen sind, oder den Code schwieriger machen. Hier soll nur auf wenige Probleme eingegangen werden, bei intensiver Nutzung der mehrfachen Vererbung sollten entsprechende Bücher zu Rate gezogen werden.
Durch die mehrfache Vererbung kann es zu Mehrdeutigkeiten kommen. Haben zwei oder mehr Basisklassen das gleiche Element oder die gleiche Methode (wobei Gleichheit sich bei Methoden außer auf den Namen auch noch auf die gleiche Parameterliste bezieht), so kommt es bei einem Aufruf zu einer Mehrdeutigkeit.
Diese kann innerhalb von Klassenmethoden aufgelöst werden, indem man
den Klassennamen direkt vor dem
Methoden- bzw. Elementnamen angibt, getrennt durch den Scope
::
-Operator.
(basisklasse::methode(parameterliste)
). Dabei ist es
nicht notwendig, daß die beschriebene Klasse diesen Namen direkt zur Verfügung
stellt. Es genügt, wenn eine ihrer Basisklassen diesen Namen implementiert.
class A
{
public:
int x;
void f();
void g(int);
};