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() { } };