Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Herança Múltipla | Visão Geral de Herança
C++ Poo
course content

Conteúdo do Curso

C++ Poo

C++ Poo

1. Fundamentos de POO em C++
2. Construtores e Destrutores
3. Visão Geral do Encapsulamento
4. Visão Geral de Herança
5. Visão Geral do Polimorfismo

book
Herança Múltipla

A herança múltipla permite que uma classe derivada herde de várias classes base. Isso significa que uma única classe derivada pode ter acesso aos membros (dados e funções) de várias classes base, combinando efetivamente seus atributos e comportamentos.

Herança Múltipla Horizontal

Nesse tipo de herança múltipla, uma classe herda propriedades e métodos de várias superclasses no mesmo nível da hierarquia de herança. Considere classes: Shape e Color, cada uma com propriedades e métodos distintos. A Shape define a forma de um objeto, e a Color define sua cor.

Shape.h

Shape.h

Color.h

Color.h

copy
1234567
class Shape { public: void setShape(const std::string& value) { shape = value; } std::string getShape() { return shape; } private: std::string shape; };

Agora, vamos criar uma subclasse chamada ColoredShape que herda propriedades e métodos de ambas as classes Shape e Color.

ColoredShape.h

ColoredShape.h

copy
123456789
#include "Shape.h" #include "Color.h" class ColoredShape : public Shape, public Color { public: void describe() { std::cout << "This object is a " << getShape() << " shape and is " << getColor() << '\n'; } };

Herança Vertical

Na herança em profundidade, uma class herda propriedades e métodos de seu pai direto e de seus ancestrais, formando uma cadeia de herança. Por exemplo, considere a class Vehicle, que pode servir como base para herança de Car, Truck e outros. Em nosso exemplo, utilizaremos o Car para ilustrar o conceito.

Vehicle.h

Vehicle.h

Car.h

Car.h

copy
12345
class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };

Para alcançar a herança vertical, é necessário configurar uma hierarquia onde uma class herda de outra, e então uma classe subsequente herda da primeira, e assim por diante. Podemos criar um ElectricCar que herda todas as propriedades e funcionalidades de Car, que por sua vez herda de Vehicle, estabelecendo uma estrutura de herança múltipla complexa.

ElectricCar.h

ElectricCar.h

copy
123456
#include "Car.h" class ElectricCar : public Car { public: void charge() { std::cout << "Electric car is charging"; } };

Por que a Herança Múltipla é Necessária

A herança múltipla oferece flexibilidade e reutilização de código em situações nas quais uma class precisa apresentar comportamentos ou características de mais de uma class pai. Veja alguns cenários em que a herança múltipla é benéfica:

  • Papéis do mundo real: um pássaro voador pode combinar características das classes Flying e Bird, representando ambas as habilidades. A classe Flying também pode ser aplicada a aviões ou outros objetos voadores.

  • Reutilização de código: a herança múltipla permite que uma classe reutilize funcionalidades de diferentes classes base sem duplicação.

  • Interfaces focadas: incentiva a combinação de interfaces pequenas e específicas em vez de utilizar uma única interface grande e genérica.

Note
Nota

Divida um objeto complexo em objetos mais simples e utilize herança múltipla para criar software flexível e de fácil manutenção.

question mark

Qual das seguintes afirmações sobre herança horizontal está correta?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 3

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

course content

Conteúdo do Curso

C++ Poo

C++ Poo

1. Fundamentos de POO em C++
2. Construtores e Destrutores
3. Visão Geral do Encapsulamento
4. Visão Geral de Herança
5. Visão Geral do Polimorfismo

book
Herança Múltipla

A herança múltipla permite que uma classe derivada herde de várias classes base. Isso significa que uma única classe derivada pode ter acesso aos membros (dados e funções) de várias classes base, combinando efetivamente seus atributos e comportamentos.

Herança Múltipla Horizontal

Nesse tipo de herança múltipla, uma classe herda propriedades e métodos de várias superclasses no mesmo nível da hierarquia de herança. Considere classes: Shape e Color, cada uma com propriedades e métodos distintos. A Shape define a forma de um objeto, e a Color define sua cor.

Shape.h

Shape.h

Color.h

Color.h

copy
1234567
class Shape { public: void setShape(const std::string& value) { shape = value; } std::string getShape() { return shape; } private: std::string shape; };

Agora, vamos criar uma subclasse chamada ColoredShape que herda propriedades e métodos de ambas as classes Shape e Color.

ColoredShape.h

ColoredShape.h

copy
123456789
#include "Shape.h" #include "Color.h" class ColoredShape : public Shape, public Color { public: void describe() { std::cout << "This object is a " << getShape() << " shape and is " << getColor() << '\n'; } };

Herança Vertical

Na herança em profundidade, uma class herda propriedades e métodos de seu pai direto e de seus ancestrais, formando uma cadeia de herança. Por exemplo, considere a class Vehicle, que pode servir como base para herança de Car, Truck e outros. Em nosso exemplo, utilizaremos o Car para ilustrar o conceito.

Vehicle.h

Vehicle.h

Car.h

Car.h

copy
12345
class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };

Para alcançar a herança vertical, é necessário configurar uma hierarquia onde uma class herda de outra, e então uma classe subsequente herda da primeira, e assim por diante. Podemos criar um ElectricCar que herda todas as propriedades e funcionalidades de Car, que por sua vez herda de Vehicle, estabelecendo uma estrutura de herança múltipla complexa.

ElectricCar.h

ElectricCar.h

copy
123456
#include "Car.h" class ElectricCar : public Car { public: void charge() { std::cout << "Electric car is charging"; } };

Por que a Herança Múltipla é Necessária

A herança múltipla oferece flexibilidade e reutilização de código em situações nas quais uma class precisa apresentar comportamentos ou características de mais de uma class pai. Veja alguns cenários em que a herança múltipla é benéfica:

  • Papéis do mundo real: um pássaro voador pode combinar características das classes Flying e Bird, representando ambas as habilidades. A classe Flying também pode ser aplicada a aviões ou outros objetos voadores.

  • Reutilização de código: a herança múltipla permite que uma classe reutilize funcionalidades de diferentes classes base sem duplicação.

  • Interfaces focadas: incentiva a combinação de interfaces pequenas e específicas em vez de utilizar uma única interface grande e genérica.

Note
Nota

Divida um objeto complexo em objetos mais simples e utilize herança múltipla para criar software flexível e de fácil manutenção.

question mark

Qual das seguintes afirmações sobre herança horizontal está correta?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 3
some-alt