|
| Nota:
Este FAQ trata de herança de membros public. Herança de
membros private ou
protected tem outras especificidades) |
|
|
|
| [ 19.5 ] Qual é a
diferença entre public:, private: e protected:? |
|
- Um membro - seja um dado membro ou uma função membro -
declarado em uma seção private:
de uma classe somente poderá ser acessado por
funções membro ou por funções
friend da classe.
- Um membro - seja um dado membro ou uma função membro -
declarado em uma seção
protected: da classe poderá ser acessado por funções
membro ou por funções friend da classe, e ainda por
funções membro ou por funções
friend de classes derivadas.
- Um membro - seja um dado membro ou uma função membro -
declarado em uma seção public: da classe poderá ser acessado a partir de qualquer outro código.
|
|
|
|
|
|
| [ 19.6 ] Porque minha
classe derivada não pode acessar membros private: de minha classe
base? |
|
| Para protegê-lo de futuras modificações na classe base. Classes derivadas não têm acesso a membros privados da classe
base. Isso efetivamente isola a classe derivada de qualquer alteração que venha a ser feita nos
membros private: da classe base. |
|
|
|
| [ 19.7 ] Como eu
protejo minhas subclasses contra erros decorrentes de alterações nas partes internas de
minha classe? |
|
| Uma classe tem duas interfaces distintas, para dois tipos
de clientes distintos: public: que destina-se a classes não relacionadas à classe base
Uma interface protected: que destina-se às classes derivadas da classe base
A menos que você possa garantir que todas as suas subclasses serão implementadas pela
mesma equipe de programação, você deve ter o cuidado de fazer com que as partes
internas de sua classe sejam
private:, e usar funções de acesso protected: inline para que as classes
derivadas possam acessar o dados internos da classe base. Dessa forma, as partes internas
da classe base podem se alterar sem impacto nas classes derivadas, a menos, é claro, que
você altere as funções
protected: de acesso . |
|
|
|