Tout ce que vous devez savoir sur l'héritage en C ++



Cet article vous fournira une connaissance détaillée et complète de l'héritage en C ++, ses différents types et comment l'implémenter.

C ++ est un langage orienté objet. L'abstraction des données, le polymorphisme, l'encapsulation et l'héritage sont les pierres angulaires de la POO. Dans cet article, nous comprendrons ce qu'est l'héritage? Types d'héritage en C ++ et tous les concepts nécessaires qui y sont liés à partir de zéro. En fin de compte, nous examinerons également l'inconvénient de ce concept puissant et tenterons de le résoudre.

Qu'est-ce que l'héritage en C ++

L'héritage est l'un des concepts les plus puissants et les plus largement utilisés en C ++ ou dans tout autre langage orienté objet. Comprendre ce concept nécessite une petite connaissance des classes et des objets. En utilisant l'héritage, nous pouvons créer une classe composée de méthodes et d'attributs généraux. Cette classe peut être héritée par d'autres classes contenant des méthodes plus spécifiques.





Héritage en C ++

En faisant cela, nous n'avons pas à réécrire les mêmes fonctionnalités encore et encore, ce qui fait gagner du temps et augmente la lisibilité du code.



Syntaxe:

classe dérivée_classe: access_type base_class {// corps de la classe}

Classe de base: La classe qui se compose de toutes les méthodes et attributs généraux qui peuvent être partagés par d'autres classes pour augmenter la lisibilité du code est appelée une classe de base.

Classe dérivée: La classe qui se compose de méthodes plus spécifiques et hérite d'une classe est appelée une classe dérivée. Une classe dérivée peut également être une classe de base pour une autre classe dérivée.



Si nous créons une classe XYZ, avec quelques attributs et méthodes. Maintenant, un élève de classe aura d'autres attributs, mais il inclura également les éléments de la classe XYZ et il en va de même pour une classe de faculté. Voyons un diagramme:

Ainsi, la classe des étudiants et des professeurs héritera de XYZ.

Spécificateur d'accès Nous avons compris comment une classe peut hériter d'une autre classe. Mais certaines personnes pourraient dire que c'est une méthode non sécurisée car tous les attributs et méthodes de la classe de base ou de la classe parente sont partagés avec la classe enfant ou la classe dérivée. Par exemple, si une classe «Banque» est héritée par la classe «clients» et «investisseurs». Les attributs de la classe «Bank» tels que «vaultpassword», d’autres informations relatives aux clients et des données privées sont partagés avec les «clients» et la classe «investisseurs», ce qui est dangereux.

Pour résoudre le problème ci-dessus, C ++ utilise des spécificateurs d'accès pour limiter l'accès des attributs de classe de base à la classe dérivée. Il existe au total 3 types de spécificateurs d'accès en C ++

  1. Publique
  2. Privé
  3. Protégé

Le tableau ci-dessous vous donnera une bonne compréhension du type de données auquel une classe dérivée peut accéder en fonction de différents spécificateurs d'accès.

Spécificateur d'accès Données publiques Données privées Données protégées
Privé Non héritéNon héritéNon hérité
Protégé Protégé Privé Protégé
Publique Publique Privé Protégé

Héritage unique

L'héritage unique peut être considéré comme la forme d'héritage pure et simple. Dans l'héritage simple, une seule classe hérite d'une classe de base.

#include using namespace std class Train {int Numberofwheels int Numberofcoaches public: void Traininfo (int n, int m) {Numberofwheels = n Numberofcoaches = m} void showinfo () {cout<Ce cas d'héritage est appelé héritage à plusieurs niveaux. La classe entre la première et la dernière classe est également appelée classe de base intermédiaire.Que pensez-vous, la dernière classe peut-elle hériter des membres de la première classe? Oui il peut

#include en utilisant l'espace de noms classe std First {protected: int a public: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' < 

Production:

Valeur de a = 10

Valeur de b = 20

Valeur de c = 30

Valeur de d = 50

comment trier un tableau en c ++

Héritage hiérarchique

Certains problèmes ne peuvent pas être résolus à l'aide de l'héritage à un ou plusieurs niveaux. Dans l'héritage hiérarchique, plusieurs classes héritent d'une seule classe de base.

#include using namespace std class College {public: College () {cout<< 'We are in class College' << endl } } class Student: public College { } class Faculty: public College { } int main() { Student student Faculty faculty return 0 }

Production:

Nous sommes en classe College

Nous sommes en classe College

Héritage multiple en C ++

Nous avons vu dans l'héritage hiérarchique une classe de base avait plus d'une classe dérivée. Dans plusieurs héritages, une classe dérivée a plus d'une classe de base.

#include using namespace std class One {protected: int a public: void getinfoOne (int x) {a = x}} class Two {protected: int b public: void getinfoTwo (int y) {b = y}} class Main: public One, public Two {public: void Display () {std :: cout<< 'Value of a = ' < À ce stade, nous avons une bonne compréhension de tous les types d'héritage utilisés en C ++. Mais attendez et si nous voulons utiliser 2 types d'héritage différents? Est-il possible? Oui, c'est possible avec l'aide de l'héritage hybride. Dans l'héritage hybride, nous combinons 2 types d'héritage différents. Par exemple - Héritage multi-niveaux et multiple, héritage hiérarchique et multiple, etc.

#include using namespace std class World {protected: int a public: void getinfoWorld (int x) {a = x}} class Continent: public World {protected: int b public: void getinfoContinent (int y) {b = y}} class Country {protected: int d public: void getinfoCountry (int m) {d = m}} class Australie: public Continent, public Country {public: void Display () {std :: cout<< 'Value of a = ' < 

Comprenons le diagramme ci-dessus qui nous aidera à comprendre le problème du diamant. la classe B et la classe C héritent de la classe A donc la classe A et la classe B ont toutes deux des attributs et des méthodes de classe A. si la classe D hérite de la classe B ainsi que de la classe C. la classe D aura tous les attributs de la classe B et de la classe C Il a également tous les attributs de la classe A hérités de la classe B ainsi que de la classe C. donc si nous faisons un objet de classe D et appelons une méthode de classe A. une situation ambiguë sera créée et le compilateur sera confondu d'où il doit classer la méthode de A, de la classe B ou de la classe D.

Pour résoudre cette ambiguïté, nous utilisons un concept appelé la classe de base virtuelle. Lorsque nous faisons d'une classe de base une classe de base virtuelle, une seule copie de cette classe est héritée quel que soit le nombre de chemins existants entre la classe de base virtuelle et une classe dérivée.

classe A {} classe B: public virtuel A {} classe C: public virtuel A {} classe D: public C, public D {}

Avec cela, nous arrivons à la fin de cet article sur l'héritage en C ++. Si vous souhaitez en savoir plus, consultez le par Edureka, une entreprise d'apprentissage en ligne de confiance. Le cours de formation et de certification Java J2EE et SOA d'Edureka est conçu pour vous former aux concepts Java de base et avancés ainsi qu'à divers frameworks Java tels que Hibernate et Spring.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de ce blog et nous vous répondrons dans les plus brefs délais.