Viskas, ką reikia žinoti apie paveldėjimą C ++



Šis straipsnis suteiks jums išsamių ir išsamių žinių apie paveldėjimą C ++ formatu, tai yra įvairūs tipai ir kaip tai įgyvendinti.

C ++ yra į objektą orientuota kalba. Duomenų abstrakcija, polimorfizmas, inkapsuliacija ir paveldėjimas yra kertiniai OOP akmenys. Šiame įraše suprasime, kas yra paveldėjimas? Paveldėjimo tipai C ++ formatu ir visos su juo susijusios būtinos sąvokos nuo nulio. Galų gale mes taip pat pažvelgsime į šios galingos koncepcijos trūkumą ir bandysime ją išspręsti.

Kas yra paveldėjimas C ++

Paveldėjimas yra viena iš galingiausių ir plačiausiai naudojamų sąvokų C ++ ar bet kurioje kitoje į objektą orientuotoje kalboje. Norint suprasti šią sąvoką, reikia šiek tiek išmanyti klases ir objektus. Naudodami Paveldėjimą galime sukurti klasę, susidedančią iš bendrų metodų ir atributų. Ši klasė gali būti paveldima kitose klasėse, kuriose naudojami specifiškesni metodai.





Paveldėjimas C ++

Tai atlikdami neturime vėl ir vėl rašyti tų pačių funkcijų, kurios taupo laiką ir padidina kodo įskaitomumą.



Sintaksė:

klasės išvesties_klasė: prieigos_tipas bazės_klasė {// klasės turinys}

Pagrindinė klasė: Klasė, kurią sudaro visi bendrieji metodai ir atributai, kuriuos gali naudoti kitos klasės, kad padidintų kodo įskaitomumą, vadinama pagrindine klase.

Išvestinė klasė: Klasė, kurią sudaro specifiškesni metodai ir kuri paveldi klasę, vadinama išvestine klase. Išvestinė klasė taip pat gali būti pagrindinė klasė kitai išvestinei klasei.



Jei sukursime XYZ klasę, su keliais atributais ir metodais. Dabar klasės studentas turės keletą kitų atributų, tačiau jame taip pat bus XYZ klasės elementų ir tas pats pasakytina apie dėstytojų klasę. Pažiūrėkime schemą:

Taigi studentas ir dėstytojų klasė paveldės iš XYZ.

Prieigos specifikatorius- Mes supratome, kaip klasė gali paveldėti kitą klasę. Tačiau kai kurie žmonės gali pasakyti, kad tai yra nesaugus metodas, nes visi pagrindinės klasės arba tėvų klasės atributai ir metodai yra bendrinami su vaikų klase arba išvestine klase. Pavyzdžiui, jei klasę „Bankas“ paveldi „klientų“ ir „investuotojų“ klasės. „Banko“ klasės atributai, tokie kaip „saugusis slaptažodis“, kita su klientais susijusi informacija ir privatūs duomenys, yra bendrinami su „klientų“ ir „investuotojų“ klase, o tai nesaugu.

Norėdami išspręsti minėtą problemą, C ++ naudoja prieigos specifikatorius, kad apribotų bazinės klasės atributų prieigą prie išvestos klasės. Iš viso C ++ yra 3 tipų prieigos specifikatoriai

„Salesforce“ kūrėjų pamoka pradedantiesiems
  1. Viešas
  2. Privatus
  3. Saugoma

Žemiau pateiktoje lentelėje galėsite gerai suprasti, kokio tipo duomenis galima pasiekti pagal išvestinę klasę pagal skirtingus prieigos specifikatorius.

Prieigos specifikatorius Viešieji duomenys Privatūs duomenys Saugomi duomenys
Privatus Ne paveldimasNe paveldimasNe paveldimas
Saugoma Saugoma Privatus Saugoma
Viešas Viešas Privatus Saugoma

Vienkartinis paveldėjimas

Vienkartinis paveldėjimas gali būti laikomas paprasta vaniline paveldėjimo forma. Vieno paveldėjimo atveju viena klasė paveldi iš bazinės klasės.

#include naudojant vardų sritį standartinė klasė Traukinys {int ratų skaičius int Autobusų skaičius public: void Traininfo (int n, int m) {ratų skaičius = n ratų skaičius = m} void showinfo () {cout<Šis paveldėjimo atvejis vadinamas daugiapakopiu paveldėjimu. Tarp pirmosios ir paskutinės klasės esanti klasė taip pat žinoma kaip tarpinė bazinė klasė.Kaip manote, ar paskutinė klasė gali paveldėti pirmosios klasės narius? Taip jis gali

#include naudojant vardų srities standartinę klasę Pirmoji {protected: int a public: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' < 

Išvestis:

A reikšmė = 10

B reikšmė = 20

C = 30 reikšmė

D reikšmė = 50

Hierarchinis paveldėjimas

Tam tikros problemos negali būti išspręstos naudojant vieno ar daugiapakopį paveldėjimą. Pagal hierarchinį paveldėjimą daugiau nei 1 klasė paveldi iš vienos bazinės klasės.

#include naudojant vardų srities standartinę klasę 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 }

Išvestis:

Mes esame klasėje

Mes esame klasėje

Daugkartinis paveldėjimas C ++

Hierarchiniame paveldėjime matėme, kad viena pagrindinė klasė turėjo daugiau nei vieną išvestinę klasę. Daugelio paveldėjimo atveju viena išvestinė klasė turi daugiau nei vieną pagrindinę klasę.

#include naudojant vardų sritį standartinė viena klasė {protected: int a public: void getinfoOne (int x) {a = x}} klasė 2 {protected: int b public: void getinfoTwo (int y) {b = y}} klasė Pagrindinis: public One, public Two {public: void Display () {std :: cout<< 'Value of a = ' < Šiuo metu mes gerai suprantame visas paveldėjimo rūšis, naudojamas C ++. Bet palaukite, jei norime naudoti 2 skirtingus paveldėjimo tipus? Ar tai įmanoma? Taip, tai įmanoma naudojant hibridinį paveldėjimą. Hibridiniame paveldėjime deriname 2 skirtingas paveldėjimo rūšis. Pavyzdžiui - daugiapakopis ir daugkartinis paveldėjimas, hierarchinis ir daugkartinis paveldėjimas ir kt.

#include naudojant vardų sritį 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}} klasės šalis {saugoma: int d public: void getinfoCountry (int m) {d = m}} klasė Australija: viešasis žemynas, viešoji šalis {public: void Display () {std :: cout<< 'Value of a = ' < 

Supraskime aukščiau pateiktą schemą, kuri padės mums suprasti deimanto problemą. B ir C klasės paveldi iš A klasės, todėl A ir B klasė turi A klasės atributus ir metodus, jei D klasė paveldi iš B ir C klasės. D klasė turės visus B ir C klasės požymius. Tai taip pat turi visus A klasės atributus, paveldėtus iš B ir C klasės, taigi, jei padarysime D klasės objektą ir vadinsime A klasės metodu, bus sukurta dviprasmiška situacija, o kompiliatorius bus supainiotas iš kur tai turėtų būti A klasės metodas, priskiriamas B arba D klasei.

Norėdami išspręsti šį neaiškumą, mes naudojame koncepciją, vadinamą virtualia bazine klase. Kai mes darome bazinę klasę kaip virtualią bazinę klasę, paveldima tik viena tos klasės kopija, neatsižvelgiant į esamų kelių tarp virtualios bazinės klasės ir išvestinės klasės skaičių.

A klasė {} B klasė: virtuali vieša A {} C klasė: virtuali vieša A {} D klasė: vieša C, vieša D {}

Tuo mes baigėme šį paveldėjimą C ++ straipsnyje. Jei norite sužinoti daugiau, patikrinkite sukūrė patikima internetinė mokymosi įmonė „Edureka“. „Edureka“ „Java J2EE“ ir SOA mokymo ir sertifikavimo kursai yra skirti mokyti jus tiek pagrindinėms, tiek pažangesnėms „Java“ koncepcijoms kartu su įvairiomis „Java“ sistemomis, tokiomis kaip „Hibernate & Spring“.

Turite mums klausimą? Prašau tai paminėti šio tinklaraščio komentarų skiltyje ir mes kuo greičiau susisieksime su jumis.