Pular para o conteúdo principal
Módulo 6 · Lição 1 de 213/18 no curso~12 min
Lições do módulo (1/2)

Herança em C++

Herança é um dos principais pilares da Programação Orientada a Objetos (OOP). Ele permite que uma nova classe (chamada de derivada ou classe filha) herde membros (atributos e métodos) de uma classe existente (chamada de base ou classe pai), promovendo a reutilização do código.

Sintaxe Básica

No C++, a herança é especificada usando o operador : após o nome da classe derivada, seguido por um especificador de acesso (geralmente public) e o nome da classe base.

C++
class Shape {
public:
    void setColor(std::string c) {
        color = c;
    }
protected:
    std::string color; // Accessible by derived classes
};

// Rectangle inherits publicly from Shape
class Rectangle : public Shape {
public:
    double getArea() {
        return width * height;
    }
private:
    double width {0.0};
    double height {0.0};
};

Especificador de acesso: protected

Juntamente com public e private, a herança apresenta o especificador protected:

  • private membros da classe base * _ não _ * estão diretamente acessíveis a partir da classe derivada.
  • protected membros da classe base são inacessíveis do lado de fora, mas são diretamente acessíveis dentro de classes derivadas.

Inicialização da Classe Base

Os construtores não são herdados automaticamente. Ao instanciar uma classe derivada, o construtor de classe base é chamado primeiro. Se a classe base exigir argumentos, devemos invocá-la explicitamente na ** lista de inicializadores de membros ** do construtor derivado.

C++
class Parent {
public:
    Parent(int x) {
        std::cout << "Parent: " << x << std::endl;
    }
};

class Child : public Parent {
public:
    // Explicit call to Parent constructor
    Child(int x, int y) : Parent(x) {
        std::cout << "Child: " << y << std::endl;
    }
};

direito, aplica-se:

Experimente também.

Exercício#cpp.m6.l1.e1
Tentativas: 0Carregando…

Crie uma classe Dog que herda publicamente da classe Animal. A classe Dog deve incluir um método public play() que imprime 'Playing' usando std::cout.

Carregando editor…
Mostrar dica

Use a sintaxe `:` seguida por `public Animal` para estender a classe base e, em seguida, escreva o método `play()`.

Solução disponível após 3 tentativas

Exercício#cpp.m6.l1.e2
Tentativas: 0Carregando…

Complete a classe Carro herdando do Veículo. Escreva um construtor para o Carro que aceite std::string b e o passe para o construtor do Veículo através da lista de inicializadores de membros.

Carregando editor…
Mostrar dica

No construtor `Car`, use a sintaxe `: Vehicle(b)` imediatamente após os parênteses do parâmetro para delegar a inicialização da marca à classe base.

Solução disponível após 3 tentativas