Qual é a diferença entre herança "pública", "privada" e "protegida" em C++? Todas as perguntas I'encontradas em SO lidam com casos específicos.
Para responder a essa pergunta, gostaria de descrever os acessores dos membros primeiro com minhas próprias palavras. Se você já sabe disso, pule para o título "próximo:".
Há três acessores que eu conheço: "público", "protegido" e "privado".
Vamos:
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
Base
está ciente de Member privado
.Por "está consciente", quero dizer "reconhece a existência de, e assim poder aceder".
O mesmo acontece com a herança pública, privada e protegida. Vamos considerar uma classe 'Base' e uma classe 'Criança' que herda de 'Base'.
Tem a ver com a forma como os membros públicos da classe base são expostos a partir da classe derivada.
Como pontos iluminados, a herança pública é uma herança tradicional que você verá na maioria das linguagens de programação. Isso é o modelo de uma relação "IS-A". Herança privada, algo AFAIK peculiar ao C++, é uma relação "IMPLEMENTADA EM TERMOS DE". Isto é, você quer utilizar a interface pública na classe derivada, mas não quer que o usuário da classe derivada tenha acesso a essa interface. Muitos argumentam que neste caso você deve agregar a classe base, ou seja, em vez de ter a classe base como uma base privada, fazer em um membro da derivada a fim de reutilizar a funcionalidade da classe base.
É essencialmente a proteção de acesso do público e dos membros protegidos da classe base na classe derivada. Com a herança pública, a classe derivada pode ver o público e os membros protegidos da base. Com a herança privada, não pode. Com a classe protegida, a classe derivada e quaisquer classes derivadas podem vê-los.