English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Vector (vecteur)++ Tutoriel de base

Vector (vecteur)++ flow control

Vector (vecteur)++ Fonction

Vector (vecteur)++ Tableaux & Chaînes

Vector (vecteur)++ Structures de données

Vector (vecteur)++ Classe & Objet

Vector (vecteur)++ Pointeurs

Vector (vecteur)++ Héritage

Vector (vecteur)++ STL tutoriel

Vector (vecteur)++ manuel de référence

Vector (vecteur)++ Héritage

Dans cet article, vous apprendrez sur C ++Toutes les connaissances sur l'héritage. Plus précisément, ce qu'est l'héritage et différentes méthodes d'implémentation de l'héritage par exemple.

L'héritage est une notion fondamentale en C ++l'une des principales fonctionnalités de la programmation orientée objet. Elle permet à l'utilisateur de créer une nouvelleClasse(Classe dérivée).

Les classes dérivées héritent de toutes les fonctionnalités de la classe de base et peuvent avoir leurs propres fonctionnalités supplémentaires.

Pourquoi utiliser l'héritage ?

Supposons que vous ayez besoin de trois rôles dans le jeu-unprofesseur de mathématiques(Professeur de mathématiques),unfootballeur (Footballer)et unCommerçant(Businessman).

Comme tous les rôles sont des personnes, ils peuvent marcher et parler. Mais ils ont également des compétences spéciales. Le professeur de mathématiques peutenseigner les mathématiques, les footballeurs peuventjouer au football, les commerçants peuventGérer une entreprise.

Vous pouvez créer trois classes distinctes qui peuvent marcher, parler et exécuter leurs compétences spéciales, comme indiqué dans le graphique suivant.

Dans chaque classe, vous copierez le même code Walk (marcher) et Talk (parler) pour chaque personnage.

Si vous souhaitez ajouter de nouvelles fonctionnalités-manger (manger), il faudra répéter le même code pour chaque personnage. Cela peut facilement entraîner des erreurs (dans les copies) et des codes redondants.

Si nous avonsPersonClasse, qui possède des fonctionnalités de base, telles que parler, marcher, manger, dormir et ajouter des compétences spéciales selon notre rôle, cela devientIl faut. C'est ce que l'héritage permet.

En utilisant l'héritage, vous n'avez pas besoin de répéter le même code pour chaque classe. Vous n'avez besoin que deHéritageC'est tout.

Par conséquent, pour le professeur de mathématiques (classe dérivée), vous pouvez hériter de toutes les fonctionnalités de Person (classe de base) et ajouter de nouvelles fonctionnalitésTeachMaths(enseigner les mathématiques). De même, pour le footballeur, vous héritez de toutes les fonctions de Person et ajoutez de nouvelles fonctionsPlayFootball(jouer au football)etc.

Ce qui rend votre code plus simple, plus facile à comprendre et plus extensible.

Il est important de se souvenir que :Lorsque vous utilisez l'héritage, chaque classe dérivée doit satisfaire aux conditions, que ce soit ou non une classe de base. Dans cet exemple, le professeur de mathématiques estune personne, un footballeur estune personne. Vous ne pouvez pas posséder :L'homme d'affaires est l'entreprise.

Vector (vecteur) ++Mise en œuvre de l'héritage en programmation

class Person 
{
  ... .. ..
};
class MathsTeacher : public Person 
{
  ... .. ..
};
class Footballer : public Person
{
  .... .. ..
};

Dans l'exemple ci-dessus, Person est la classe de base, tandis que MathsTeacher et Footballer sont dérivés de Person.

Les classes dérivées apparaissent avec la déclaration de la classe, suivie d'un deux-points, du mot-clé public et du nom de la classe de base dérivée.

Comme MathsTeacher et Footballer héritent de Person, ils peuvent accéder à tous les membres de données et fonctions de Person.

Exemple : C ++Héritage en programmation

Créer des personnages de jeu en utilisant le concept d'héritage.

#include <iostream>
using namespace std;
class Person
{
     public:
        string profession;
        int age;
        Person(): profession("sans emploi"), age(16) { }
        void display()
        {
             cout << "Mon métier est: " << profession << endl;
             cout << "Mon âge est: " << age << endl;
             walk();
             talk();
        }
        void walk() { cout << "Je peux marcher" << endl; }
        void talk() { cout << "Je peux parler" << endl; }
};
// La classe MathsTeacher hérite de la classe de base Person.
class MathsTeacher : public Person
{
    public:
       void teachMaths() { cout << "Je vais enseigner les mathématiques." << endl; }
};
// La classe Footballer hérite de la classe de base Person.
class Footballer : public Person
{
    public:
       void playFootball() { cout << "Je vais jouer au football." << endl; }
};
int main()
{
     MathsTeacher teacher;
     teacher.profession = "enseignant";
     teacher.age = 23;
     teacher.display();
     teacher.teachMaths();
     Footballer footballer;
     footballer.profession = "sportif";
     footballer.age = 19;
     footballer.display();
     footballer.playFootball();
     return 0;
}

Résultat de la sortie

Mon profession est : enseignant
Mon âge est : 23
Je peux marcher.
Je peux parler
Je peux enseigner la mathématique.
Mon profession est : sportif
Mon âge est : 19
Je peux marcher.
Je peux parler
Je peux jouer au football.

Dans ce programme, Person est la classe de base, et MathsTeacher et Footballer sont dérivés de la classe Person.

La classe Person a deux membres de données- profession et age. Il a également deux fonctions membres- walk() et talk()

MathsTeacher et Footballer peuvent accéder à tous les membres de données et fonctions de Person.

Cependant, MathsTeacher et Footballer ont également leurs propres fonctions membres : teachMaths() et playFootball(). Ces fonctions ne peuvent être accessibles que par leur propre classe.

Dans la fonction main(), un nouveau MathsTeacher teacher est créé.

Parce qu'il peut accéder aux membres de données Person, il peut définir la profession (profession) et l'âge (âge) de teacher. Affichez ces données en utilisant la fonction display() définie dans la classe Person. De même, la fonction teachingMaths() est définie dans la classe MathsTeacher.

De même, un nouveau Footballer footballer sera créé. Il peut également accéder aux membres de données Person et peut afficher en appelant la fonction display(). Ensuite, seules les fonctions accessibles par les footballeurs (footballer) peuvent accéder à la fonction playFootball().

Modificateurs d'accès dans l'héritage

Lors de la création de classes dérivées à partir de la classe de base, différents modificateurs d'accès peuvent être utilisés pour hériter des membres de données de la classe de base.

Ce peut être public, protected ou private.

Dans l'exemple ci-dessus, la classe de base Person est héritée publiquement par MathsTeacher et football.

En savoir plus surVector (vecteur) ++Public, protégé et privé dans l'héritageRedéfinition des fonctions dans les classes dérivées

Redéfinition des membres de la fonction dans l'héritage

Supposons que les fonctions membres des classes de base et dérivées aient le même nom et les mêmes paramètres.

Si vous créez un objet de la classe dérivée et essayez d'accéder à cette fonction membre, seules les fonctions membres de la classe dérivée peuvent être appelées.

Les membres des fonctions de la classe dérivée couvrent les membres des fonctions de la classe de base.

En savoir plus surVector (vecteur) ++Redéfinition des membres de la fonction dans l'héritageRedéfinition des fonctions dans les classes dérivées