Trabalhando com herança em C ++

Neste tutorial, vamos falar sobre herança em C ++, um tema muito interessante, vamos ver através de um exemplo simples. Para quem está no Windows, você pode baixar um IDE para programar, ele o ajudará a compilar e executar os programas, deixamos o link abaixo:

DEVC ++

Aqui vamos usar o Linux, especificamente o Ubuntu, que já possui um compilador para C ++. A linguagem C ++, como todos provavelmente sabem, permite herança múltipla, ao contrário do Java, que só permite herança simples e se quisermos algo semelhante temos que puxar interfaces, no final é menos sujeito a erros.

O principal exemplo que vamos mostrar aqui para ver a herança em C ++ é simples, não vamos entrar em herança múltipla, exceto no final para mostrar um erro com o qual podemos ser afetados.

1. Herança simples em C ++


Para iniciar o primeiro exemplo, herança simples, teremos uma classe Animal, que será nossa classe base ou pai, e 2 classes que herdarão, Cachorro que não terá nenhum código e Gato que adicionará um novo parâmetro à classe pai. Vamos ver o código (é curto):
 #include using namespace std; class Animal {private: int age; público: Animal (int a = 1) {idade = a; }; int getAge () const {return age;} void setAge (int a = 9) {age = a; }}; classe Cachorro: Animal público {}; classe Cat: público Animal {privado: peso do flutuador; público: Gato (int a = 2, flutuante w = 3,2): Animal (a) {peso = w; } float getWeight () const {return weight;}}; int main () {Mastina do cão; cout << "____DOG____" << endl; cout << "Antes:" << mastin.getAge () << endl; mastin.setAge (2); cout << "Depois:" << mastin.getAge () << endl; Miau de gato (3, 4,1); cout << "____CAT____" << endl; cout << meow.getAge () << "" << meow.getWeight () << endl; } 
Presumimos que você já conheça um pouco de C ++ para ver os problemas de herança e, portanto, as partes das funções ou partes públicas e privadas não iremos explicar. Para herdar de uma classe, temos a seguinte sintaxe:
 classe daughter_class: public parent_class
Então, em nosso exemplo para criar a classe Cachorro Nós usamos:
 classe Dog: public Animal
Indica que Cachorro herda de Animal, tudo que a classe Animal possui em seus blocos públicos ou protegidos podemos usá-la, porém se usarmos o bloco privado obteremos um erro. Boa aula Cachorro está vazio, por isso não tem grandes dificuldades.

Se formos para a aula Gato, temos a mesma declaração de classe de antes, além disso, vemos que adiciona uma nova variável peso, essa variável não tem nem a classe Animal, nenhum Cachorro. Aqui no construtor da classe, chamamos o construtor da classe pai, portanto, passamos os dados para a variável idade, e também preenchemos a variável peso.

ObservaçãoVocê pode ver que os parâmetros que passamos para as funções podem ter um valor padrão.

No a Principal nós criamos um objeto da classe Cachorro, deixamos a idade como padrão e a mostramos, então usamos a função setAge para mudar a idade e mostrá-la novamente. Finalmente criamos um objeto da classe Gato, e desta vez não deixamos as variáveis ​​terem um valor padrão e as passamos para elas na hora de criar o objeto, e para não variar as mostramos.

Se nós quisermos execute este código em um terminal Linux com g ++, fazemos o seguinte:

 g ++ -o test tesc.gcc
E para executá-lo muito fácil:
 ./teste
Vamos mostrar uma captura com a compilação e execução do pequeno código:

2. Herança múltipla em C ++


Vê-los perigos de herança múltipla vamos deixar um código muito pequeno:
 #include using namespace std; class Animal {public: void walk () {cout << "Walking in Animal" << endl; }}; class Mammal {public: void walk () {cout << "Walking in Mammal" << endl; }}; classe Cão: Animal público, Mamífero público {}; int main () {Cachorro cachorro; dog.walk (); } 
Nós vemos que Cachorro herda de Animal Y Mamífero, e ambas as classes têm a mesma função andar, se eu fizer uso da função normal como no código:
 dog.walk ()
E ao compilar, obtemos o seguinte erro:

Para resolvê-lo, podemos usar a seguinte sintaxe, para chamar a função Animal:

 cão.Animal :: caminhar ();
ou para usar a classe Mamífero:
 cão.Mamifero :: caminhar ();
E claro que a melhor solução é não ter 2 funções com o mesmo nome se vamos fazer uso de herança múltipla, neste programa é muito fácil resolver, mas num grande pode tornar-se uma dor de cabeça.

Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave