| | | |

Minicurso de C++ para Matemática

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

5.2 Herança

A herança é um dos principais conceitos da programação orientada a objetos. Ela permite que uma classe herde atributos e métodos de outra classe, chamada de classe base ou superclasse. A classe que herda é chamada de classe derivada ou subclasse. A sintaxe para a herança é a seguinte:

1class NomeDaClasseDerivada : public NomeDaClasseBase {
2 // atributos e métodos da classe derivada
3};

A classe derivada pode adicionar novos atributos e métodos, além de sobrescrever os métodos da classe base. A herança é uma forma de reutilização de código e permite a criação de hierarquias de classes.

Exemplo 5.2.1.

Em sequência ao Exemplo 5.1.1, o seguinte código define uma classe Ponto3D derivada da classe base Ponto2D.

Código 25: Ponto3D.cpp
1#include <iostream>
2#include <cmath>
3
4class Ponto2D {
5 ...
6};
7
8class Ponto3D : public Ponto2D {
9
10 // atributos
11 double coord_z;
12
13public:
14
15 // construtor
16 Ponto3D(double x, double y, double z)
17 : Ponto2D(x, y), coord_z(z) {}
18
19 // métodos
20 double z() const {
21 return coord_z;
22 }
23
24 double distancia(const Ponto3D& P) const {
25 return std::sqrt(\
26 std::pow(x() - P.x(), 2) \
27 + std::pow(y() - P.y(), 2) \
28 + std::pow(coord_z - P.z(), 2));
29 }
30
31 // destructor
32 ~Ponto3D() {
33 std::cout << "Ponto3D destruído." << std::endl;
34 }
35};
36
37int main()
38{
39 Ponto3D C(-1.0, -2.0, 1.0);
40 Ponto3D D(2.0, 1.0, -1.0);
41
42 std::cout << "dist(D,C): "
43 << D.distancia(C) << std::endl;
44
45 return 0;
46}
E. 5.2.1.

Como sequência do E.5.1.1, crie uma classe Poly2, derivada da classe Poli1, para manipulação de polinômios de grau 2

p(x)=a2x2+a1x+a0. (5.2)

A classe deve conter os seguintes métodos:

  • Construtor que recebe os coeficientes a2, a1 e a0.

  • Método double avalia(double x) que retorna o valor do polinômio em x.

  • Método double derivada(double x) que retorna o valor da derivada do polinômio em x.

  • Método double raiz() que retorna a raiz do polinômio.


Considerando o código da classe Poli1 do E.5.1.1.

Código 26: Poly2.cpp
1class Poli2 : public Poli1 {
2
3 double coef_a2;
4
5public:
6
7 Poli2 (double a2, double a1, double a0)
8 : Poli1(a1, a0), coef_a2(a2) {}
9
10 double avalia(double x) const {
11 return coef_a2 * x * x + Poli1::avalia(x);
12 }
13
14 double derivada(double x) const {
15 return 2 * coef_a2 * x + Poli1::derivada(x);
16 }
17
18 void raiz(double &x0, double &x1) const {
19 double delta = a1() * a1() - 4 * coef_a2 * a0();
20 if (delta < 0) {
21 x0 = x1 = NAN;
22 } else if (delta == 0) {
23 x0 = x1 = -a1() / (2 * coef_a2);
24 } else {
25 x0 = (-a1() + sqrt(delta)) / (2 * coef_a2);
26 x1 = (-a1() - sqrt(delta)) / (2 * coef_a2);
27 }
28 }
29
30};

Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |