Tipuri de moștenire în C++ Ce ar trebui să știți?

Publicat: 2023-04-05

V-ați întrebat vreodată cum sunt construite unele sisteme software populare? Totul se datorează unui mecanism puternic numit moștenire în programarea orientată pe obiecte (OOP). Moștenirea permite programatorilor să creeze noi clase construite pe cele existente, permițând reutilizarea codului și dezvoltarea eficientă a software-ului. Imaginează-ți că construiești un sistem care necesită mai multe clase, fiecare dintre ele împărtășind anumite atribute și comportamente comune.

În loc să scrieți același cod în mod repetat, puteți utiliza moștenirea pentru a crea o clasă de bază și a obține noi clase din aceasta, economisind timp și efort.

Moștenirea nu este doar eficientă, ci și versatilă. În C++, există mai multe tipuri de moștenire, fiecare cu beneficii și cazuri de utilizare unice.

În acest articol, vom arunca o privire completă asupra diferitelor tipuri de moștenire în C++ , oferind coduri relevante, explicații și exemple din viața reală pe parcursul articolului.

Cuprins

Diferite tipuri de moștenire în C++

Limbajul de programare C++ oferă programatorilor săi cinci tipuri diferite de opțiuni de moștenire. În funcție de context și de cerințe, dezvoltatorii și programatorii pot lucra cu oricare dintre aceste tipuri de moștenire.

Moștenire unică

Moștenirea unică este cel mai comun tip de moștenire în C++. În moștenirea unică, o clasă derivată moștenește de la o singură clasă de bază. Aceasta înseamnă că o clasă moștenește toți membrii de date publici și protejați și funcțiile membre ale clasei de bază, având în același timp capacitatea de a adăuga propriii membri de date și funcții membre.

Consultați fragmentul de cod de mai jos pentru a obține sintaxa și înțelegerea moștenirii unice:

// Clasa de bază

clasa Animal {

public:

void eat() {

std::cout << „Animalul mănâncă” << std::endl;

}

};

// Clasă derivată

clasa Câine : animal public {

public:

void bark() {

std::cout << „Câinele latră” << std::endl;

}

};

În acest exemplu, avem o clasă de bază numită Animal cu o funcție eat() cu un singur membru .Definim apoi o clasă derivatăDog care moștenește public de la Animal.Câinele are și propria funcție de membru bark().Folosind moștenirea unică,Dog poate accesa funcția eat()aclasei Animalși poate adăuga propriul comportament cufuncția bark().

Când să utilizați moștenirea unică în C++

Programatorii pot folosi moștenirea unică pentru a crea o clasă derivată care adaugă funcționalitate la clasa de bază.

De exemplu, puteți folosi moștenirea unică atunci când creați un joc care implică diferite personaje, cum ar fi războinici, magi și arcași. Toate aceste personaje au unele atribute și comportamente comune, cum ar fi punctele de sănătate, puterea de atac și viteza de mișcare. Folosind moștenirea unică, puteți crea o clasă de bază numită Character care conține atributele și comportamentele comune și puteți deriva fiecare clasă de caractere din aceasta pentru a adăuga funcționalitatea lor unică.

În moștenirea multiplă, o clasă derivată poate moșteni de la mai multe clase de bază. Aceasta înseamnă că o clasă poate avea mai mult de o clasă părinte directă. Ca rezultat, clasa derivată moștenește toți membrii de date publici și protejați și funcțiile membre ale fiecărei clase de bază.

Iată un exemplu de moștenire multiplă:

// Clasa de bază 1

Class Shape {

public:

virtual double area() = 0;

};

// Clasa de bază 2

clasa Culoare {

public:

virtual std::string getColor() = 0;

};

// Clasă derivată

clasa Dreptunghi : public Forma, public Culoare {

public:

double area() override {

latime de retur * inaltime;

}

std::string getColor() override {

culoare de întoarcere;

}

privat:

latime dubla = 5,0;

inaltime dubla = 3,0;

std::string color = „albastru”;

};

În acest exemplu, avem două clase de bază, Shape și Color , fiecare cu funcția sa virtuală.Definim apoi o clasă derivatăRectangle care moștenește atât Formă, cât și Culoare.Rectangle suprascrie funcțiile virtuale ale ambelor clase de bază pentru a oferi propria sa implementare. Folosind moștenirea multiplă,Rectangle poate moșteni proprietățile ambelor clase de bază, ShapeșiColor, pentru a crea un dreptunghi cu o anumită culoare și zonă.

Când să utilizați moștenirea multiplă în C++

Utilizați moștenirea multiplă atunci când doriți să combinați funcționalitatea din mai multe clase de bază. De exemplu, luați în considerare o aplicație GUI care necesită diferite tipuri de controale, cum ar fi butoane, casete de selectare și casete de text. Fiecare tip de control are funcționalitatea și comportamentul său, dar au și unele funcționalități comune, cum ar fi gestionarea evenimentelor utilizatorului și afișarea textului.

Folosind moștenirea multiplă, puteți crea o clasă de bază numităControl care conține funcționalitatea comună și puteți deriva fiecare tip de control din aceasta, precum și alte clase de bază care conțin funcționalitatea lor specifică.

În moștenirea ierarhică, o singură clasă de bază este moștenită de mai multe clase derivate. Ca și moștenirea multiplă, clasele derivate din moștenirea ierarhică obțin toți membrii de date publici și protejați și funcțiile membre ale clasei de bază.

Iată un fragment de cod pentru a vă ajuta să înțelegeți implementarea moștenirii ierarhice în C++:

// Clasa de bază

clasa Animal {

public:

virtual void makeSound() = 0;

};

// Clasa derivată 1

clasa Pisica : animal public {

public:

void makeSound() override {

std::cout << „Miau” << std::endl;

}

};

// Clasa derivată 2

clasa Câine : animal public {

public:

void makeSound() override {

std::cout << „Woof” << std::endl;

}

};

În acest exemplu, avem o clasă de bază numită Animal cu o funcție virtuală makeSound().Definim apoi două clase derivate,Cat și Dog, pe care ambele le moștenesc de laAnimal. Fiecare clasă derivată suprascrie funcțiamakeSound() pentru a oferi propria sa implementare.Folosind moștenirea ierarhică, putem crea diferite tipuri de animale care împărtășesc comportamente comune, cum ar fi scoaterea unui sunet.

Când să utilizați moștenirea ierarhică în C++

Utilizați moștenirea ierarhică atunci când doriți să creați mai multe clase derivate care au o funcționalitate comună. De exemplu, luați în considerare o aplicație bancară care necesită diferite tipuri de conturi, cum ar fi conturi de economii, conturi curente și conturi de card de credit. Toate aceste tipuri de conturi au anumite atribute și comportamente comune, cum ar fi numărul de cont, soldul și rata dobânzii.

Folosind moștenirea ierarhică, puteți crea o clasă de bază numită Account care conține atributele și comportamentele comune și puteți deriva fiecare tip de cont din aceasta pentru a adăuga funcționalitatea sa unică.

Moștenirea pe mai multe niveluri

Moștenirea pe mai multe niveluri în C++ este un tip de moștenire în care o clasă derivată este moștenită de o altă clasă derivată. În acest scenariu, clasa derivată moștenește toți membrii de date publici și protejați și funcțiile membre ale clasei părinte imediate, care, la rândul său, moștenește din propria clasă părinte și așa mai departe.

Iată cum puteți implementa în mod programatic moștenirea pe mai multe niveluri în C++:

// Clasa de bază

vehicul de clasa {

public:

void start() {

std::cout << „Vehiculul pornește” << std::endl;

}

};

// Clasa intermediară

mașină de clasă: vehicul public {

public:

void drive() {

std::cout << „Mașina conduce” << std::endl;

}

};

// Clasă derivată

clasa SportsCar : mașină publică {

public:

void accelerate() {

std::cout << „Mașina sport accelerează” << std::endl;

}

};

Când să folosiți moștenirea pe mai multe niveluri în C++

Utilizați moștenirea pe mai multe niveluri atunci când doriți să creați o clasă derivată care moștenește de la o altă clasă derivată și adaugă funcționalitatea acesteia. De exemplu, luați în considerare un sistem software care necesită diferite tipuri de vehicule, cum ar fi mașini, camioane și motociclete. Aceste tipuri de vehicule au anumite atribute și comportamente comune, cum ar fi viteza, accelerația și frânarea.

Folosind moștenirea pe mai multe niveluri, puteți crea o clasă de bază numită Vehicul care conține atributele și comportamentele comune și puteți obține clase intermediare, cum ar fi MașinașiCamionul, pentru a adăuga funcționalitatea lor specifică. Apoi, puteți derivaclasa SportsCar din clasa Carpentru a adăuga funcționalitatea sa unică.

Moștenirea hibridă este o combinație de două sau mai multe tipuri de moștenire. Denumită și moștenire virtuală, o clasă derivată în moștenirea hibridă moștenește de la mai multe clase de bază, dintre care unele sunt moștenite prin mai multe căi. Acest lucru poate crea ierarhii de moștenire complexe și poate fi dificil de înțeles și menținut.

Consultațicursurile de dezvoltare software upGradpentru a vă îmbunătăți abilitățile.

Iată un exemplu de moștenire hibridă în C++:

// Clasa de bază 1

clasa Animal {

public:

virtual void makeSound() = 0;

};

// Clasa de bază 2

clasa CanFly {

public:

virtual void fly() = 0;

};

// Clasa de bază 3

clasa CanSwim {

public:

virtual void swim() = 0;

};

// Clasă derivată

clasa Liliac : animal public, CanFly public {

public:

void makeSound() override {

std::cout << „Screech!”<< std::endl;

}

void fly() override {

std::cout << „Liliacul zboară” << std::endl;

}

};

// Clasă derivată

clasa Pinguin : animal public, CanSwim public {

public:

void makeSound() override {

std::cout << „Hooonk!”<< std::endl;

}

void swim() override {

std::cout << „Penguin înoată” << std::endl;

}

};

Explorați cursurile noastre populare de inginerie software

Master în Informatică de la LJMU și IIITB Programul de certificat de securitate cibernetică Caltech CTME
Bootcamp de dezvoltare completă Programul PG în Blockchain
Program Executive PG în Full Stack Development
Vezi mai jos toate cursurile noastre
Cursuri de Inginerie Software

Când să utilizați moștenirea hibridă în C++

În plus față de cele patru tipuri de moștenire discutate mai devreme, moștenirea hibridă poate fi utilă în anumite scenarii în care sunt necesare mai multe tipuri de moștenire. Utilizați moștenirea hibridă pentru a combina beneficiile mai multor tipuri de moștenire.

De exemplu, luați în considerare un sistem software care necesită diferite tipuri de animale, dintre care unele pot zbura, în timp ce altele pot înota. Puteți utiliza moștenirea hibridă pentru a crea o clasă de bază numită Animal și pentru a deriva două clase intermediare, CanFlyșiCanSwim, din aceasta. În cele din urmă, folosind moștenirea hibridă, puteți obține claseleBat și Penguindin ambele clase intermediare. ClasaBat va moșteni de la AnimalșiCanFly, în timp ce clasaPenguinva moșteni de laAnimalșiCanSwim. În acest fel, puteți crea diferite tipuri de animale cu combinații unice de abilități.

Moștenirea hibridă în C++ poate fi utilă în sisteme software complexe în care sunt necesare mai multe tipuri de moștenire. Cu toate acestea, poate crea și ierarhii complexe de moștenire care pot fi dificil de înțeles și de menținut. Ca și în cazul altor tipuri de moștenire, alegerea tipului potrivit pentru cerințele specifice ale proiectului de dezvoltare software și obiectivele de proiectare este crucială.

Citiți articolele noastre populare legate de dezvoltarea software

Consultațicursurile noastre gratuite de tehnologie pentru a obține un avantaj față de concurență.

Lucruri importante de reținut atunci când folosiți moștenirea:

În timp ce moștenirea este un mecanism puternic în C++, are și câțiva factori de luat în considerare la implementare.

  1. Evitați ierarhiile profunde de moștenire : ierarhiile profunde de moștenire pot duce la un cod greu de citit, înțeles și întreținut.Păstrați ierarhiile de moștenire cât mai superficiale posibil pentru a îmbunătăți lizibilitatea și mentenabilitatea codului.
  2. Utilizați cu înțelepciune modificatorii de acces: modificatorii de acces (publici, protejați și privat) controlează vizibilitatea membrilor de date și a funcțiilor membrilor dintr-o clasă.Folosiți-le cu înțelepciune pentru a evita expunerea detaliilor de implementare care nu ar trebui să fie vizibile în afara clasei.
  3. Evitați moștenirea diamantelor: moștenirea diamantelor apare atunci când o clasă moștenește de la două clase care moștenesc din aceeași clasă de bază.Acest lucru poate duce la ambiguitate și, în general, este cel mai bine evitat.
  4. Evitați utilizarea excesivă a moștenirii: deși moștenirea poate fi utilă, este important să evitați utilizarea excesivă a acesteia.În unele cazuri, compoziția sau alte modele de design pot fi o alegere mai bună.

Explorați cursurile noastre gratuite de dezvoltare software

Elementele fundamentale ale cloud computingului Noțiuni de bază JavaScript de la zero Structuri de date și algoritmi
Tehnologia blockchain Reacționează pentru începători Bazele de bază ale Java
Java Node.js pentru începători JavaScript avansat

La pachet

Pentru a rezuma, moștenirea este un concept crucial în programarea C++ pe care fiecare student la programare ar trebui să-l stăpânească. Înțelegând diferitele tipuri de moștenire și cazurile de utilizare ale acestora, puteți crea cod eficient, organizat și care poate fi întreținut, devenind astfel un dezvoltator de software mai bun.

Dacă ați găsit acest articol interesant, vă puteți îmbunătăți și mai mult cunoștințele despre dezvoltarea software, înscriindu-vă în programul de certificare DevOps upGrad, oferit în colaborare cu IIIT Bangalore. Acest program acoperă diverse aspecte ale dezvoltării software, inclusiv codificare, testare și implementare și vă poate ajuta să deveniți un dezvoltator de software calificat în industrie.

De ce este moștenirea semnificativă în programarea C++?

Prin utilizarea moștenirii, programatorii pot economisi timp și efort în dezvoltarea de software pentru a construi sisteme software complexe într-o manieră organizată. Pe măsură ce programatorii lucrează pentru a crea coduri mai lizibile, procesul de codificare se simplifică în mai multe.

Care sunt lucrurile importante de reținut atunci când utilizați moștenirea în programarea C++?

Când utilizați moștenirea în programarea C++, este esențial să aveți în vedere unele lucruri cruciale, cum ar fi evitarea ierarhiilor de moștenire profunde, utilizarea înțeleaptă a modificatorilor de acces, evitarea moștenirii diamantelor și nu folosirea excesivă a moștenirii.

Ce tip de moștenire ar trebui să folosesc pentru proiectul meu de dezvoltare software?

Alegerea tipului corect de moștenire depinde de cerințele specifice ale proiectului de dezvoltare software și de obiectivele de proiectare. Alegerea dintre diferitele tipuri de moștenire depinde în întregime de cerințele proiectului dumneavoastră. Prin urmare, faceți o analiză detaliată înainte de a continua.