Menu
Coddy logo textTech

Herança Básica

Parte da seção Programação Orientada a Objetos do Journey de C++ da Coddy — lição 48 de 104.

Herança permite que uma classe adquira as propriedades e comportamentos de outra classe. A classe da qual se herda é chamada de classe base (ou pai), e a classe que herda é chamada de classe derivada (ou filha).

Para criar uma classe derivada, use dois pontos seguidos pelo especificador de acesso e o nome da classe base:

class Animal {
public:
    std::string name;
    
    void eat() {
        std::cout << name << " is eating" << std::endl;
    }
};

class Dog : public Animal {
public:
    void bark() {
        std::cout << name << " says woof!" << std::endl;
    }
};

A classe Dog agora tem acesso tanto a name quanto a eat() de Animal, além de seu próprio método bark(). Esta é a essência da herança: reutilizar código existente enquanto se adiciona nova funcionalidade.

Dog myDog;
myDog.name = "Buddy";
myDog.eat();    // Herdado de Animal
myDog.bark();   // Definido em Dog

A palavra-chave public antes de Animal especifica o tipo de herança. A herança pública significa que os membros públicos da classe base permanecem públicos na classe derivada. Esta é a forma mais comum e modela um relacionamento "é-um": um Dog é um Animal.

challenge icon

Desafio

Fácil

Vamos construir uma hierarquia simples de veículos que demonstra a herança em ação. Você criará uma classe base Vehicle e uma classe derivada Motorcycle que a estende com um comportamento especializado.

Você organizará seu código em três arquivos:

  • Vehicle.h: Defina uma classe base Vehicle com:
    • Um membro público std::string brand
    • Um membro público int year
    • Um método público displayInfo() que imprime a marca e o ano do veículo no formato: Brand: <brand>, Year: <year>
  • Motorcycle.h: Defina uma classe Motorcycle que herda publicamente de Vehicle. Esta classe derivada deve adicionar:
    • Um membro público int engineCC para a cilindrada do motor
    • Um método público revEngine() que imprime: <brand> goes vroom vroom!

    A classe Motorcycle herdará automaticamente brand, year e displayInfo() de Vehicle.

  • main.cpp: Leia três entradas (cada uma em uma linha separada):
    1. Nome da marca (string)
    2. Ano (inteiro)
    3. Cilindrada do motor (inteiro)

    Crie um objeto Motorcycle, defina seus membros herdados (brand e year), bem como seu próprio membro engineCC. Em seguida, demonstre a herança chamando tanto o método herdado quanto o método específico da motocicleta.

    Formato de saída:

    Brand: <brand>, Year: <year>
    Engine: <engineCC>cc
    <brand> goes vroom vroom!

Por exemplo, com as entradas Harley, 2022 e 1200:

Brand: Harley, Year: 2022
Engine: 1200cc
Harley goes vroom vroom!

Não se esqueça de incluir protetores de cabeçalho (header guards) em seus arquivos de cabeçalho e usar #include "Vehicle.h" no seu cabeçalho Motorcycle para acessar a classe base.

Folha de consulta

A herança permite que uma classe adquira propriedades e comportamentos de outra classe. A classe da qual se herda é a classe base (pai), e a classe que herda é a classe derivada (filho).

Para criar uma classe derivada, use dois pontos seguidos pelo especificador de acesso e o nome da classe base:

class Animal {
public:
    std::string name;
    
    void eat() {
        std::cout << name << " is eating" << std::endl;
    }
};

class Dog : public Animal {
public:
    void bark() {
        std::cout << name << " says woof!" << std::endl;
    }
};

A classe derivada tem acesso aos membros públicos da classe base, além de seus próprios membros:

Dog myDog;
myDog.name = "Buddy";
myDog.eat();    // Herdado de Animal
myDog.bark();   // Definido em Dog

A palavra-chave public especifica a herança pública, o que significa que os membros públicos da classe base permanecem públicos na classe derivada. Isso modela uma relação do tipo "é-um".

Experimente você mesmo

#include <iostream>
#include <string>
#include "Motorcycle.h"

using namespace std;

int main() {
    string brand;
    int year;
    int engineCC;

    cin >> brand;
    cin >> year;
    cin >> engineCC;

    // TODO: Criar um objeto Motorcycle
    // TODO: Definir seus membros brand, year e engineCC
    // TODO: Chamar displayInfo() para mostrar informações herdadas
    // TODO: Imprimir as informações do motor no formato: Engine: <engineCC>cc
    // TODO: Chamar revEngine() para demonstrar o comportamento específico da motocicleta

    return 0;
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos