Ponteiros para Classes

Há dois casos em que um ponteiro para uma classe pode ser convertido para um ponteiro para uma classe base.

Comentários

O primeiro caso é quando a classe base especificada é acessível e a conversão não é ambígua.(Consulte Várias Classes Base para obter mais informações sobre referências ambíguas da classe base.)

Se uma classe base é acessível depende do tipo de herança usado na derivação.Considere a herança ilustrada na figura a seguir.

Gráfico de herança para ilustração de acessibilidade da classe Base

Acessibilidade de classe Base do gráfico de herança

A tabela a seguir mostra a acessibilidade de classe base para a situação ilustrada na figura.

Acessibilidade da classe base

Tipo de função

Derivação

Conversão de

B * A * jurídicos?

Função externa de (não com escopo classe)

Private

Não

 

Protegido

Não

 

Público

Sim

Função de membro B (em escopo B)

Private

Sim

 

Protegido

Sim

 

Público

Sim

Função de membro c (em escopo C)

Private

Não

 

Protegido

Sim

 

Público

Sim

O segundo caso em que um ponteiro para uma classe pode ser convertido para um ponteiro para uma classe base é quando você usa uma conversão de tipo explícito.(Consulte expressões com conversões de tipo explícito para obter mais informações sobre as conversões de tipo explícito.)

O resultado de tal conversão é um ponteiro para o "subobjeto," a parte do objeto que é descrita completamente pela classe base.

O código a seguir define duas classes, A e B, onde B é derivada de A.(Para obter mais informações sobre herança, consulte Classes derivadas de.) Ele define, em seguida, bObject, um objeto do tipo Be dois ponteiros (pA e pB) que aponte para o objeto.

// 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
}

O ponteiro pA é do tipo A *, que podem ser interpretados como significado "ponteiro para um objeto do tipo A." Os membros do bObject(, como BComponent e BMemberFunc) são exclusivos para digitar B e, portanto, não estão acessíveis por meio de pA. O pA ponteiro permite o acesso apenas a essas características (funções de membro e dados) do objeto que são definidas na classe A.

Consulte também

Referência

Conversões de ponteiro (C++)