Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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
.gif)
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.