2012-10-15 12 views
10

Beispiel:C++: pointer Vergleich der Basis vs abgeleitet von dem gleichen Objekt

class A{ 
    int x; 
}; 
class B{}; 
class C : public A, public B {}; 

C c; 
A* a = &c; 
B* b = &c; 

, wenn I den Wert von & c und b überprüfen, sie unterschiedlich sind, weil b nach einem im Speicher ist, aber noch als ich bewerten & c == b, sie sind die gleichen, warum ist der Fall?

+1

Sie haben unterschiedliche Werte, da sie auf verschiedene Teile desselben Objekts zeigen. Wenn Sie sie jedoch so konvertieren, dass sie auf denselben Typ verweisen, sind sie wieder identisch. –

+1

Dieser Code wird nicht kompiliert. '& c' ist eine Referenz auf einen Zeiger, während' a' und 'b' Zeiger sind. –

+0

Sorry Jungs, ich hatte zunächst c als Objekt, aber dann habe ich versucht, es ein Zeiger für die Klarstellung, aber vergessen, den Rest zu ändern .... – godlamp

Antwort

12

Im Ausdruck &c == b müssen beide Operanden auf den gleichen Typ gezwungen werden. In diesem Fall kann &c (ein C*) in B* konvertiert werden, da B eine zugängliche Basisklasse von C ist. Dies ist genau die gleiche Konvertierung wie in B* b = &c, so dass die resultierenden Werte gleich sind und der Vergleich wahr ergibt.

+1

Schöne Erklärung, Herr. – WhozCraig