Wskaźniki do klas
Istnieją dwa przypadki, w których wskaźnik do klasy mogą być konwertowane na wskaźnik do klasy podstawowej.
Uwagi
Pierwszy przypadek jest po określonej klasy podstawowej jest dostępny i konwersja jest jednoznaczne.(Zobacz Wiele klas podstawowych uzyskać więcej informacji o niejednoznacznych odwołań klasa bazowa.)
Czy dostępne jest klasą bazową zależy od rodzaju dziedziczenie używane podczas wyprowadzania.Należy wziąć pod uwagę dziedziczenia, przedstawione na poniższym rysunku.
Wykres dziedziczenia dla ilustracji klasa bazowa ułatwień dostępu
W poniższej tabeli przedstawiono dostępność klasa bazowa dla sytuacji, pokazano na rysunku.
Klasa bazowa ułatwień dostępu
Typ funkcji |
Wyprowadzenie |
Konwersja z B * aby prawną A *? |
---|---|---|
Funkcję zewnętrzną (nie klasy zakresu) |
Prywatne |
Nr |
|
Chronione |
Nr |
|
Publicznego |
Tak |
Funkcji składowej B (w zakresie B) |
Prywatne |
Tak |
|
Chronione |
Tak |
|
Publicznego |
Tak |
Funkcja Członkowskie c (w zakresie C) |
Prywatne |
Nr |
|
Chronione |
Tak |
|
Publicznego |
Tak |
Przy jawna konwersja typu jest drugim przypadku, w którym wskaźnik do klasy mogą być konwertowane na wskaźnik do klasy podstawowej.(Zobacz wyrażenia z jawne konwersje typów uzyskać więcej informacji o konwersje jawne typu.)
Wynik takiego przekształcenia jest wskaźnik do "podobiektów," część obiektu, który jest całkowicie opisane przez klasy podstawowej.
Poniższy kod definiuje dwie klasy A i B, gdzie B jest pochodną A.(Aby uzyskać więcej informacji o dziedziczeniu, zobacz Uzyskane klas.) Następnie definiuje bObject, obiekt typu Bi dwa wskaźniki (pA i pB), wskaż polecenie obiekt.
// 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
}
Wskaźnik pA jest typu A *, które mogą być interpretowane jako oznaczające "wskaźnik do obiektu typu A." Członkowie bObject(takich jak BComponent i BMemberFunc) są unikatowe dla typu B i dlatego są niedostępne za pośrednictwem pA. pA Wskaźnik umożliwia dostęp tylko do tych cech (funkcji elementów członkowskich i danych) obiektu, które są zdefiniowane w klasie A.