Travailler avec l'héritage en C++

Dans ce tutoriel, nous allons parler de héritage en C++, un sujet très intéressant, voyons-le à travers un exemple simple. Pour les personnes qui sont sous Windows, vous pouvez télécharger un IDE pour programmer, cela vous aidera à compiler et exécuter les programmes, nous laissons le lien ci-dessous :

DEVC++

Ici, nous allons utiliser Linux, en particulier Ubuntu, qui dispose déjà d'un compilateur pour C++. Le langage C++, comme tout le monde le sait probablement, permet l'héritage multiple, contrairement à Java, qui n'autorise que l'héritage simple et si on veut quelque chose de similaire il faut extraire les interfaces, au final c'est moins sujet aux erreurs.

L'exemple principal que nous allons montrer ici pour voir l'héritage en C++ est simple, nous n'allons pas entrer dans l'héritage multiple, sauf à la fin pour montrer une erreur avec laquelle nous pouvons être affectés.

1. Héritage simple en C++


Pour commencer le premier exemple, héritage simple, nous aurons une classe Animal, qui sera notre classe de base ou parent, et 2 classes qui hériteront, Chien qui n'aura aucun code et Chat qui ajoutera un nouveau paramètre à la classe parent. Voyons le code (c'est court) :
 #include en utilisant l'espace de noms std; classe Animal {privé : int age; public : Animal (int a = 1) {age = a; } ; int getAge () const {return age;} void setAge (int a = 9) {age = a; }} ; classe Chien : public Animal {} ; classe Chat : public Animal {privé : flotteur poids; public : Chat (int a = 2, float w = 3.2) : Animal (a) {weight = w ; } float getWeight () const {poids de retour;}}; int main () {Chien mastin ; cout << "____CHIEN____" << endl; cout << "Avant :" << mastin.getAge () << endl ; mastin.setAge (2) ; cout << "Après:" << mastin.getAge () << endl; Miaou chat (3, 4.1); cout << "____CAT____" << endl; cout << miaou.getAge () << "" << miaou.getWeight () << endl; } 
Nous supposons que vous connaissez déjà un peu de C++ pour continuer à voir les problèmes d'héritage, et donc les parties de fonctions ou parties publiques et privées que nous n'allons pas expliquer. Pour hériter d'une classe on a la syntaxe suivante :
 classe fille_classe : classe_parente publique
Donc dans notre exemple pour créer la classe Chien nous avons utilisé:
 classe Chien: public Animal
Indique que Chien hérite d'Animal, tout ce que la classe Animal a dans ses blocs publics ou protégés, nous pouvons l'utiliser, cependant si nous utilisons le bloc privé, nous obtiendrons une erreur. Bonne classe Chien il est vide, donc il n'a pas de difficulté majeure.

Si nous allons en classe Chat, on a la même déclaration de classe qu'avant, à part ça on voit qu'elle ajoute une nouvelle variable poids, cette variable ne l'a pas ni la classe Animal, ni Chien. Ici, dans le constructeur de la classe, nous avons appelé le constructeur de la classe parent, nous passons donc les données de la variable âge, et nous remplissons également la variable poids.

NoterVous pouvez voir que les paramètres que nous passons aux fonctions peuvent avoir une valeur par défaut.

Dans le principale on crée un objet de la classe Chien, nous laissons l'âge par défaut, et l'affichons, puis nous utilisons la fonction setAge pour changer l'âge et le montrer à nouveau. Enfin, nous créons un objet de la classe Chat, et cette fois nous ne laissons pas les variables avoir une valeur par défaut et nous les leur passons lors de la création de l'objet, et afin de ne pas varier nous les montrons.

Si nous voulons exécutez ce code dans un terminal linux avec g ++, nous procédons comme suit :

 g ++ -o test tesc.gcc
Et pour le lancer très facilement :
 ./test
Nous allons montrer une capture avec la compilation et l'exécution du petit code :

2. Héritage multiple en C++


De les voir dangers de l'héritage multiple nous allons laisser un tout petit code :
 #include en utilisant l'espace de noms std; class Animal {public: void walk () {cout << "Walking in Animal" << endl; }} ; class Mammifère {public: void walk () {cout << "Walking in Mammal" << endl; }}; classe Chien : public Animal, public Mammifère {}; int main () {Chien chien ; dog.walk (); } 
On voit ça Chien hérite de Animal Oui Mammifère, et les deux classes ont la même fonction marcher, si j'utilise la fonction normale comme dans le code :
 dog.walk ()
Et on compile on obtient l'erreur suivante :

Pour le résoudre, nous pouvons utiliser la syntaxe suivante, pour appeler la fonction Animal:

 chien.Animal :: marcher ();
ou pour utiliser la classe Mammifère:
 chien.Mamifero :: promenade ();
Et bien sûr, la meilleure solution n'est pas d'avoir 2 fonctions avec le même nom si nous allons utiliser l'héritage multiple, dans ce programme il est très facile de le résoudre, mais dans un grand cela peut devenir un casse-tête.

Avez-vous aimé et aidé ce tutoriel ?Vous pouvez récompenser l'auteur en appuyant sur ce bouton pour lui donner un point positif

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave