Capítulo 14: Herança (Reutilização de Código) 🐉🔥

Neste capítulo, vamos aprender a criar novas classes baseadas em classes que já existem usando a Herança, com o tema Dragon Ball!


📖 O que é Herança?

É o mecanismo pelo qual uma classe (chamada de classe filha ou subclasse) adquire as propriedades e comportamentos de outra classe (chamada de classe pai ou superclasse). Isso evita que tenhamos que reescrever código que já funciona!


📖 Exemplo Guiado: Linhagem Saiyajin

Vamos criar uma classe base Guerreiro e uma classe filha Saiyajin que herda tudo de Guerreiro e adiciona novos poderes!

  1. Crie o arquivo heranca_saiyajin.cpp na pasta src/:
#include <iostream>
#include <string>
 
using namespace std;
 
// Classe Pai (Superclasse)
class Guerreiro {
public:
    string nome;
    int vida;
 
    void atacar() {
        cout << nome << " atacou!" << endl;
    }
};
 
// Classe Filha (Subclasse) herdando de Guerreiro
// O ': public Guerreiro' indica a herança
class Saiyajin : public Guerreiro {
public:
    int nivel_ki;
 
    void transformar() {
        cout << nome << " se transformou em Super Saiyajin! Ki subiu para " << nivel_ki * 10 << "!" << endl;
    }
};
 
int main() {
    // Objeto da classe filha
    Saiyajin goku;
    goku.nome = "Goku"; // Herdado de Guerreiro
    goku.vida = 100;    // Herdado de Guerreiro
    goku.nivel_ki = 9000; // Específico de Saiyajin
 
    cout << "--- Inicio do Combate ---" << endl;
    goku.atacar(); // Método herdado
    goku.transformar(); // Método próprio
 
    return 0;
}

🕹️ Como Executar e Testar no VS Code

  1. Abra o terminal integrado.
  2. Compile: g++ heranca_saiyajin.cpp -o heranca_saiyajin
  3. Execute: ./heranca_saiyajin

Resultado Esperado:

--- Inicio do Combate ---
Goku atacou!
Goku se transformou em Super Saiyajin! Ki subiu para 90000!

📊 Ilustração Visual: Hierarquia de Classes

Veja a relação de herança entre as classes:

classDiagram
    class Guerreiro {
        +string nome
        +int vida
        +atacar()
    }
    class Saiyajin {
        +int nivel_ki
        +transformar()
    }
    Guerreiro <|-- Saiyajin

🛠️ Prática Obrigatória 1: Clã Uchiha

Crie um programa chamado heranca_ninja.cpp baseado em Naruto. Crie uma classe base Ninja (com nome e jutsu_basico()) e uma classe filha Uchiha (que herda de Ninja e adiciona o método ativar_sharingan()). Teste criando um objeto Uchiha (ex: Sasuke)!


🔑 Gabarito de Código

Prática 1: heranca_ninja.cpp

#include <iostream>
#include <string>
 
using namespace std;
 
class Ninja {
public:
    string nome;
 
    void jutsu_basico() {
        cout << nome << " usou Jutsu de Substituicao!" << endl;
    }
};
 
class Uchiha : public Ninja {
public:
    void ativar_sharingan() {
        cout << nome << " ativou o Sharingan! 👁️" << endl;
    }
};
 
int main() {
    Uchiha sasuke;
    sasuke.nome = "Sasuke";
 
    cout << "--- Batalha Ninja ---" << endl;
    sasuke.jutsu_basico();
    sasuke.ativar_sharingan();
 
    return 0;
}

📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

(Siga o padrão estabelecido no Guia)


Capitulo Anterior | Proximo Capitulo