Einige Probleme bei mehrfacher Vererbung (2/3)


class B
{
  public:
    int x;
    void f();
    void g(char);
};

class AB : public A, public B
{
};

AB ab;

ab.x = 3      // Fehler! x ist in A und in B definiert --> Mehrdeutigkeit
ab.A::x = 3;  // ok: Explizit das x aus Klasse A ansprechen.
ab.f();       // Fehler! Auch eine Mehrdeutigkeit
ab.g('c');    // ok: Durch den Parameter vom Typ char eindeutige Zuordnung

Man beachte, daß einige Compiler bei gleichen Funktionsnamen mit verschiedenen Parameterlisten dennoch Mehrdeutigkeiten bemängeln können.

Eine andere Möglichkeit Mehrdeutigkeiten auszu"losen wäre in der abgeleiteten Klasse zwei neue Funktionen zu definieren, die jeweils eine der gleichlautenden aus einer Basisklasse aufrufen.

Der Compiler gibt nur Fehlermeldungen über Mehrdeutigkeiten aus, wenn der entsprechende Name auch benutzt wird. Andernfalls existiert auch kein Problem und somit wäre eine Fehlermeldung überflüssig.