Herança simples e múltipla
Modele relações “é um” com herança simples e controle as armadilhas da herança múltipla
Herança simples e múltipla é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
O que é Herança?
A herança permite que uma classe reutilize e estenda outra classe. A primeira é a classe derivada, e a segunda é a classe base. Esse recurso modela relações de "é-um".
class Animal {
public:
void breathe() { std::cout << "breathing\n"; }
};
class Dog : public Animal {
public:
void bark() { std::cout << "Woof!\n"; }
};Herança Pública
Utilize public para modelar uma relação de "é-um" — um Dog é um Animal. Os membros mantêm seu nível de acesso na classe derivada.
Herança Protegida e Privada
A herança protected e private modela a relação "é-implementado-em-termos-de" — e é raramente utilizada. Prefira a composição nesses casos.
Acesso aos Membros da Classe Base
A classe derivada pode utilizar diretamente qualquer membro público ou protegido da classe base.
Dog d;
d.breathe(); // inherited from Animal
d.bark(); // own memberOrdem dos Construtores
Os construtores da classe base são executados antes dos construtores da classe derivada. Utilize a lista de inicialização de membros para passar argumentos à classe base.
class Pet : public Animal {
std::string name_;
public:
Pet(std::string n) : Animal(), name_(std::move(n)) {}
};Ordem dos Destrutores
Os destrutores são executados na ordem inversa — primeiro os da classe derivada e depois os da classe base. Torne os destrutores da classe base virtual se você excluir o objeto por meio de um ponteiro para a classe base.
Herança Múltipla
O C++ permite que uma classe herde de mais de uma classe base. Utilize esse recurso com moderação — ele complica o projeto.
class Printable { public: virtual void print() = 0; };
class Serializable { public: virtual std::string serialize() = 0; };
class Document : public Printable, public Serializable {
// implements both interfaces
};O Problema do Diamante
Se duas classes base compartilham uma classe base comum, a classe derivada acaba tendo duas cópias dessa classe base. Resolva isso com herança virtual.
class A {};
class B : virtual public A {};
class C : virtual public A {};
class D : public B, public C {}; // D has ONE A, not twoCusto da Herança Virtual
Classes base virtuais adicionam sobrecarga — um ponteiro extra por objeto e uma indireção extra a cada acesso a um membro da classe base. Evite-as quando possível.
Composição versus Herança
Muitas vezes, a composição de "tem-um" é mais simples do que a herança de "é-um". Um Car tem um Engine — não herde Car de Engine.
class Engine { /* ... */ };
class Car {
Engine engine_; // composition
};Herança de Interface versus Herança de Implementação
Há dois usos comuns:
- Interface — derive de uma classe base puramente virtual para cumprir um contrato
- Implementação — derive para reutilizar código (CRTP, misturas)
Quando Utilizar Herança
Utilize herança quando:
- Existe uma relação real de "é-um"
- Você precisa de polimorfismo em tempo de execução por meio de funções virtuais
- A classe base foi projetada para herança
Verificação Rápida
Qual técnica impede duas cópias de uma classe base comum quando a herança múltipla é utilizada?
Recapitulação
A herança modela relações de "é-um" com herança pública. A herança múltipla é permitida, mas o problema do diamante exige herança virtual. Prefira a composição para relações de "tem-um" e para reutilização de código.
Perguntas Frequentes
A aula “Herança simples e múltipla” é grátis?
Sim — o texto completo de “Herança simples e múltipla” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “Herança simples e múltipla”?
Modele relações “é um” com herança simples e controle as armadilhas da herança múltipla Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Herança simples e múltipla”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Herança simples e múltipla
- Funções virtuais e a vtable
- Classes abstratas e métodos virtuais puros
- Herança versus composição: compromissos