Inheritance (herança)
Programação orientada a objetos permite que classes possam herdar estados e comportamentos comuns usados de outras classes. Neste exemplo, bicicleta torna-se agora a superclasse de MountainBike. Na linguagem de programação, cada classe é permitido ter uma superclasse direta, e cada superclasse tem o potencial para um número ilimitado de subclasses.
Na herança, a classe derivada contém os membros da classe base acrescido de quaisquer novos membros adicionados. Como resultado, uma classe derivada pode se referir a membros da classe base (a não ser se os membros forem redefinidos na classe derivada). O operador de escopo resolução (::) pode ser usado para se referir a membros de classes base, diretos ou indiretos, quando os membros foram redefinidos na classe derivada.
Tipos de Heranças
A linguagem de programação C++ possui dois tipos de herança.
Simples:
Em “herança simples” uma forma comum de herança, as classes têm apenas uma classe base.
Múltiplas:
A nova versão do C + + introduziu um modelo de “herança múltipla”. Num gráfico de múltiplas heranças, as classes de derivados podem ter multiplos números de classes de bases diretas ou seja a classe AB deriva da classa A e de uma outra classe B.
Override
Métodos Override (substituição), em programação orientada a objeto, é um recurso de linguagem que permite que uma subclasse ou classe filha possa fornecer uma implementação específica de um método que já é fornecido por uma de suas superclasses ou classes pai.
A implementação Override das subclasses substitui a implementação na superclasse, fornecendo um método que tem o mesmo nome, mesmos parâmetros ou assinatura, e mesmo tipo de retorno como o método na classe pai.
Exemplo:
Neste exemplo damos a classe MountainBike todos os mesmos campos e métodos da classe bicicleta, e ainda permite que seu código se concentre exclusivamente sobre as características que a tornam única. Isso faz do código de suas subclasses fáceis de ler. Usamos metodos Override neste exemplo de duas maneiras, para substituir um método da subclasse e adicionar mais um construtor com parametros.
No entanto, você deve tomar cuidado para documentar corretamente o estado e o comportamento que cada superclasse define, uma vez que o código não irá aparecer no arquivo de origem de cada subclasse.
C++
Classe #1 – Principal.cpp
#include "stdafx.h"
#include <iostream>
#include <string>
#include "bicicleta.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
// Metodo com Construtor Default
Bicicleta bike1;
bike1.modelo = "ZR069";
bike1.quadro = "Ferro";
bike1.rodas = "Ferro";
bike1.freios = "Pastilhas";
bike1.bicicleta();
cout << endl;
// Construtor Override
Bicicleta bike2("XA 200", "Aluminio", "Pastilhas", "Aluminio");
bike2.bicicleta();
cout << endl;
// Herança - Montain Bike
BicicletaMontanha bike3;
bike3.modelo = "Attack 500";
bike3.quadro = "Fibra de Carbono";
bike3.rodas = "Aluminio";
bike3.freios = "Disco";
bike3.amortecedores = "R3000";
bike3.garrafa = "Aluminio 500ml";
bike3.marchas = "18 Velocidades";
bike3.gps = "Discovery 2.5";
// Metodo Override
bike3.bicicleta();
system("pause");
return 0;
}
Classe #2 – Bicicleta.h
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Bicicleta
{
public:
string modelo;
string quadro;
string freios;
string rodas;
// Construtor Default
Bicicleta() {}
// Construtor Override
Bicicleta(string bmodelo, string bquadro, string bfreios, string brodas)
{
modelo = bmodelo;
quadro = bquadro;
rodas = brodas;
freios = bfreios;
}
void bicicleta()
{
cout << " Bicicleta:" + modelo << endl;
cout << " Quadro:" + quadro << endl;
cout << " Rodas:" + rodas << endl;
cout << " Freios:" + freios << endl;
}
};
class BicicletaMontanha : public Bicicleta
{
public:
string marchas;
string amortecedores;
string garrafa;
string gps;
//Metodo Override
void bicicleta()
{
cout << " Bicicleta:" + modelo << endl;
cout << " Quadro:" + quadro << endl;
cout << " Rodas:" + rodas << endl;
cout << " Freios:" + freios << endl;
cout << " Marchas:" + marchas << endl;
cout << " Amortecedores:" + freios << endl;
cout << " Garrafa:" + garrafa << endl;
cout << " Gps:" + gps << endl;
}
BicicletaMontanha()
{
}
};

