Udostępnij za pośrednictwem


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

Dostępność klasa bazowa Wykres dziedziczenia

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.

Zobacz też

Informacje

Wskaźnik konwersji (C++)