Wenn beide Basis und ableiten-Klasse die gleichen member-variable, wie compiler beheben, welches Mitglied genannt zu werden?
Look at this example
class base {
public:
int m1;
base() {
m1 = 5;
}
};
class der: public base {
public:
int m1;
der() {
m1 = 6;
}
};
int main() {
der d;
cout << d.m1;
return 0;
}
Hier Größe des Objekts d 8 byte
, die ist reserviert für 2 m1
(eins für die base-Klasse und andere für das ableiten der Klasse). Was ist der Mechanismus zu lösen d.m1
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
m1
imder
verbirgt sich der name desbase
'sm1
, so dass jeder Zugang zum1
über eineder
Objekt bekommt man diese Instanz istder::m1
. Sie können aufbase::m1
imder
wie diese:Haben Sie Zugriff auf das Basis-Objekt so:
Der compiler löst
m1
basierend auf den statischen Typ vond
. Dies bedeutet, dass Sie unterschiedliche Ergebnisse erhalten, die fürund
Dies ist, weil beim auflösen
m1
auf einen Ausdruck vom Typder
, die Mitgliedder::m1
verbirgtbase::m1
.