0Pricing
C++ Academy · Aula

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 member

Ordem 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 two

Custo 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

  1. Herança simples e múltipla
  2. Funções virtuais e a vtable
  3. Classes abstratas e métodos virtuais puros
  4. Herança versus composição: compromissos
← Voltar para C++ Academy