Tot el que heu de saber sobre l'herència en C ++



Aquest article us proporcionarà un coneixement detallat i exhaustiu de l’herència en C ++, els seus diferents tipus i com implementar-la.

C ++ és un llenguatge orientat a objectes. L’abstracció de dades, el polimorfisme, l’encapsulació i l’herència són les bases de l’OOP. En aquest post, entendrem què és l’herència? Tipus d’herència en C ++ i tots els conceptes necessaris relacionats amb ella des de zero. Al final, també veurem l’inconvenient d’aquest potent concepte i intentarem solucionar-lo.

Què és l’herència en C ++

L'herència és un dels conceptes més potents i àmpliament utilitzats en C ++ o en qualsevol altre llenguatge orientat a objectes. Per entendre aquest concepte cal un petit coneixement de les classes i dels objectes. Utilitzant Herència, podem crear una classe que consti de mètodes i atributs generals. Aquesta classe pot ser heretada per altres classes que contenen mètodes més específics.





Herència en C ++

En fer-ho, no hem d’escriure una i altra vegada les mateixes funcionalitats, cosa que estalvia temps i augmenta la llegibilitat del codi.



Sintaxi:

class proven_class: access_type base_class {// body class}

Classe base: La classe que consta de tots els mètodes i atributs generals que poden compartir altres classes per augmentar la llegibilitat del codi s’anomena classe base.

Classe derivada: La classe que consisteix en mètodes més específics i que hereta una classe s’anomena classe derivada. Una classe derivada també pot ser una classe base per a alguna altra classe derivada.



Si creem una classe XYZ, amb alguns atributs i mètodes. Ara un estudiant de classe tindrà alguns altres atributs, però també inclourà els elements de la classe XYZ i el mateix passa amb una classe de professors. Vegem un diagrama:

Per tant, l’alumne i el professorat heretaran de XYZ.

Especificador d'accés Vam entendre com una classe pot heretar una altra classe. Però algunes persones podrien dir que és un mètode insegur, ja que tots els atributs i mètodes de la classe base o la classe pare es comparteixen amb la classe fill o la classe derivada. Per exemple, si una classe 'Banc' és heretada per la classe 'clients' i 'inversors'. Els atributs de la classe 'Banc', com ara 'vaultpassword', altra informació relacionada amb els clients i dades privades, es comparteixen amb els 'clients' i la classe 'inversors', cosa que no és segura.

Per resoldre el problema anterior, C ++ utilitza especificadors d'accés per limitar l'accés dels atributs de classe base a la classe derivada. Hi ha un total de 3 tipus d’especificadors d’accés a C ++

  1. Públic
  2. Privat
  3. Protegit

La taula següent us proporcionarà una bona comprensió de quin tipus de dades es pot accedir per classe derivada segons els diferents especificadors d’accés.

Especificador d'accés Dades públiques Dades privades Dades protegides
Privat No heretatNo heretatNo heretat
Protegit Protegit Privat Protegit
Públic Públic Privat Protegit

Herència única

L'herència única es pot considerar com la forma d'herència de vainilla simple. En una sola herència, una sola classe hereta d’una classe 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<Aquest cas d’herència s’anomena herència multinivell. La classe entre la primera i l'última classe també es coneix com a classe base intermèdia.Què creieu que pot heretar els membres de la primera classe l’última classe? Sí, pot

#include using namespace std class First {protected: int a public: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' < 

Sortida:

Valor de a = 10

Valor de b = 20

Valor de c = 30

Valor d = 50

Herència jeràrquica

Alguns problemes no es poden resoldre amb l'ajut de l'herència d'un sol nivell o de diversos nivells. En herència jeràrquica, més d'una classe hereta d'una sola classe 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 }

Sortida:

Estem a la classe universitària

Estem a la classe universitària

Herència múltiple en C ++

Vam veure en l’herència jeràrquica que una classe base tenia més d’una classe derivada. En herència múltiple, una classe derivada té més d’una classe 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}} classe Principal: public One, public Two {public: void Display () {std :: cout<< 'Value of a = ' < En aquest punt, tenim una bona comprensió de tots els tipus d’herència que s’utilitzen en C ++. Però, què passa si volem utilitzar dos tipus diferents d’herència? És possible? Sí, és possible amb l'ajut de l'herència híbrida. A l’herència híbrida, combinem 2 tipus diferents d’herència. Per exemple: herència multinivell i múltiple, herència jeràrquica i múltiple, 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}} classe País {protected: int d public: void getinfoCountry (int m) {d = m}} classe Austràlia: públic Continent, país públic {public: void Display () {std :: cout<< 'Value of a = ' < 

Comprenguem el diagrama anterior que ens ajudarà a entendre el problema del diamant. la classe B i la classe C hereten de la classe A, per tant, tant la classe A com la classe B tenen atributs i mètodes de la classe A. si la classe D hereta de la classe B i de la classe C. la classe D tindrà tots els atributs de la classe B i la classe C També té tots els atributs de la classe A heretats de la classe B, així com de la classe C. per tant, si fem un objecte de classe D i anomenem un mètode de classe A. es crearà una situació ambigua i es confondrà el compilador des d’on hauria de classificar el mètode A, de la classe B o de la classe D.

Per resoldre aquesta ambigüitat utilitzem un concepte anomenat classe base virtual. Quan fem una classe base una classe base virtual, només s’hereta una còpia d’aquesta classe independentment del nombre de camins existents entre la classe base virtual i una classe derivada.

classe A {} classe B: públic virtual A {} classe C: públic virtual A {} classe D: públic C, públic D {}

Amb això, arribem al final d’aquest article d’herència a C ++. Si voleu obtenir més informació, consulteu el per Edureka, una empresa d’aprenentatge en línia de confiança. El curs de formació i certificació de Java J2EE i SOA d’Edureka està dissenyat per formar-vos tant per a conceptes Java bàsics com avançats, juntament amb diversos marcs Java com Hibernate & Spring.

Tens alguna pregunta? Si us plau, mencioneu-ho a la secció de comentaris d’aquest bloc i us respondrem el més aviat possible.