Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Es gibt zwei Fälle, in denen ein Zeiger auf eine Klasse in einen Zeiger auf eine Basisklasse konvertiert werden kann.
Hinweise
Im ersten Fall sein, wenn die angegebene Basisklasse zugegriffen werden kann und die Konvertierung eindeutig ist.(Siehe Mehrere Basisklassen Weitere Informationen über mehrdeutige Basisklasse verweist.)
Ob eine Basisklasse zugreifen können, hängt von der Art der Vererbung verwendet in der Ableitung ab.Betrachten Sie die Vererbung als in der folgenden Abbildung veranschaulicht.
Basisklassen-Barrierefreiheit der Abbildung für Vererbungs-Diagramm
.gif)
In der folgenden Tabelle sind die Basisklassen barrierefreiheit für die Situation, die in der Abbildung verdeutlicht wird.
Basisklassen-Barrierefreiheit
Typ der Funktion |
Ableitung |
Konvertierung von B* gültig A* werden? |
|---|---|---|
Externe (nicht Klasse-bewertete) - Funktion |
Private |
Nein |
|
Protected |
Nein |
|
Public |
Ja |
B-Memberfunktion (in B-Bereich) |
Private |
Ja |
|
Protected |
Ja |
|
Public |
Ja |
C-Memberfunktion (in C-Bereich) |
Private |
Nein |
|
Protected |
Ja |
|
Public |
Ja |
Im zweiten Fall, in dem ein Zeiger auf eine Klasse in einen Zeiger auf eine Basisklasse konvertiert werden kann, besteht darin, eine explizite Typkonvertierung verwenden.(Siehe Ausdrücke mit expliziten Typkonvertierungen Informationen zu expliziten Typkonvertierungen.)
Das Ergebnis einer solchen Konvertierung ist ein Zeiger auf das „Unterobjekt,“ der Teil des Objekts, das von der Basisklasse vollständig beschrieben wird.
Im folgenden Code werden zwei Klassen definiert, A und B, in dem B von Aabgeleitet ist.(Weitere Informationen zu Vererbung, finden Sie unter Abgeleitete Klassen). Sie definieren dann bObject, ein Objekt des Typs Bund zwei Zeiger (pA und pB) dieser Punkt auf das Objekt.
// conve__pluslang_Pointers_to_Classes.cpp
// C2039 expected
class A
{
public:
int AComponent;
int AMemberFunc();
};
class B : public A
{
public:
int BComponent;
int BMemberFunc();
};
int main()
{
B bObject;
A *pA = &bObject;
B *pB = &bObject;
pA->AMemberFunc(); // OK in class A
pB->AMemberFunc(); // OK: inherited from class A
pA->BMemberFunc(); // Error: not in class A
}
Der Zeiger pA ist vom Typ A *, der als Wichtigkeit „Zeiger interpretiert werden kann, in ein Objekt des Typs A“. Member bObject (wie BComponent und BMemberFunc) sind eindeutig, B einzugeben und können daher über pAnicht zugänglich.Der pA Zeiger können den Zugriff nur auf diese Eigenschaften (Memberfunktionen und Daten) des Objekts, die in der Klasse Adefiniert sind.