Programar em C++/Herança: diferenças entre revisões
[edição não verificada] | [edição não verificada] |
Conteúdo apagado Conteúdo adicionado
Linha 122:
Assim ficamos com as possíveis combinações
----
*Classe base herdada como '''public''':
----
----
**Membros públicos (public) da classe base:
***É como se copiássemos os membros da classe base e os colocássemos como "public" na classe derivada. No final, eles permanecem como públicos.
----
**Membros privados (private) da classe base:
***Os membros estão presentes na classe, porém ocultos como privados. Desta forma as informações estão presentes, mas só podem ser acessadas através de funções publicas ou protegidas da classe base.
----
**Membros protegidos (protected) da classe base:
***Se tivermos membros protegidos (protected) na classe derivada, eles
----
<br />
----
*Classe base herdada como '''private''':
----
----
**Membros públicos (public) da classe base:
***Os membros se comportam como se tivessem sido copiados como privados (private) na classe derivada.
----
**Membros privados (private) da classe base:
***Os membros estão presentes na classe, porém ocultos como privados. Desta forma as informações estão presentes, mas não poderão ser
----
**Protected membrer da classe base:▼
**Membros protegidos (protected) da classe base:
***Os membros se comportam como se tivessem sido copiados como privados (private) na classe derivada.
----
<br />
----
----
----
**Membros públicos (public) da clase base:
***Se comportam como se tivéssemos copiado-os como protegidos (protected) na classe derivada
----
***Os membros estão presentes na classe, porém ocultos como privados. Desta forma as informações estão presentes, mas não poderão ser acessadas, a não ser por funções da classe base que se utilizem delas.
----
**Membros protegidos (protected) da classe base:
***
----
Em suma, estas regras podem ser sintetizadas em uma regra muito simples: ''Prevalece o atributo mais restritivo''. Para isto basta-nos listar os atributos por ordem de restrições decrescente:
#'''''private'''''
▲*base class inheret as '''Protected''':
#'''''protected'''''
#'''''public'''''
▲***Assim é como estivéssemos a copiar os protected members da classe base e os colocássemos como protected na classe derivada.
Assim, temos todas as combinações definidas quando colocamos um atributo combinado com o outro, bastando para isto escolher sempre o mais restritivo na combinação. Por exemplo: Quando temos uma variável pública na base e a herança é privada, a combinação resulta em uma variável privada na classe derivada.
<source lang="cpp">
▲aqui está um exemplo muito simples
#include <iostream>
using namespace std;
class base
{
Linha 160 ⟶ 186:
void show() { cout << i << " " << j << "\n"; }
};
class derived : public base
{
Linha 167 ⟶ 194:
void showk() { cout << k << "\n"; }
};
int main()
{
derived ob(3);
ob.set(1, 2); //
ob.show(); //
ob.showk(); //
#ifdef WIN32
system ("pause");
#endif
return 0;
}
</source>
Conseguimos acessar as funções set() e show() porque são heradadas como publicas.
Agora modifiquemos o atributo de acesso na declaração da herança da classe base:
<source lang="cpp">
#include <iostream>
using namespace std;
class base
{
Linha 188 ⟶ 224:
void show() { cout << i << " " << j << "\n"; }
};
class derived : private base
{
Linha 195 ⟶ 232:
void showk() { cout << k << "\n"; }
};
int main()
{
derived ob(3);
ob.set(1, 2); //
ob.show(); //
ob.showk(); //
#ifdef WIN32
system ("pause");
#endif
return 0;
}
</source>
Agora já não podemos acessar as funções porque estão privadas.
== Heranças múltiplas ==
|