Wie kann in einer mehrfach abgeleiteten Klasse, deren Basisklassen von derselben Basisklasse erben und beide Basisklassen ein Mitglied mit demselben Namen wie eines in ihrer Basisklasse definieren, über einen anderen Pfad auf das Mitglied zugegriffen werden?
Der Titel ist ziemlich lang, hier eine Illustration.
struct A{int i;};
struct B1:A{int i;};//non virtual
struct B2:A{int i;};//non vitual
struct C:B1,B2{};
Nun , wie die für den Zugriff i
auf A
in B1
oder i
in A
in B1
in einem C
Objekt?
Klarer zu sein, c.i
ist natürlich mehrdeutig, wo c
ist ein C
. Ist c.A::i
aber auch nicht eindeutig, gibt es zwei realisierbare Wege:
C -> B1 -> A
C -> B2 -> A
Wie gebe ich eine zu verwendende an?
static_cast
ist ein ausführlicher, aber expliziter Ansatz:
C c;
static_cast<B1&>(c).i;
static_cast<B2&>(c).i;
static_cast<A&>(static_cast<B1&>(c)).i;
static_cast<A&>(static_cast<B2&>(c)).i;
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen