Kõik, mida peate teadma pärimise kohta C ++ keeles



See artikkel annab teile üksikasjalikud ja põhjalikud teadmised pärandist C ++ keeles, see on erinevat tüüpi ja kuidas seda rakendada.

C ++ on objektile orienteeritud keel. Andmete abstraktsioon, polümorfism, kapseldamine ja pärimine on OOP nurgakivid. Selles postituses saame aru, mis on pärimine? Päranduse tüübid C ++ keeles ja kõik sellega seotud vajalikud mõisted nullist. Lõpuks vaatame ka selle võimsa kontseptsiooni puudust ja proovime seda lahendada.

Mis on pärand C ++ -s

Pärimine on C ++ või mis tahes muu objektile orienteeritud keele üks võimsamaid ja laialdasemalt kasutatavaid mõisteid. Selle kontseptsiooni mõistmiseks on vaja vähe tunde klassidest ja objektidest. Pärandit kasutades saame luua klassi, mis koosneb üldistest meetoditest ja atribuutidest. Selle klassi võivad pärida teised, spetsiifilisemaid meetodeid sisaldavad klassid.





Pärand C ++

Seda tehes ei pea me uuesti ja uuesti samu funktsioone kirjutama, mis säästab aega ja suurendab koodi loetavust.



Süntaks:

klassi tuletatud klass: juurdepääsutüübi baasi_klass {// klassi keha}

Põhiklass: Klass, mis koosneb kõikidest üldistest meetoditest ja atribuutidest, mida teised klassid saavad koodi loetavuse suurendamiseks jagada, nimetatakse põhiklassiks.

Tuletatud klass: Spetsiifilisematest meetoditest koosnevat ja klassi pärijat klassi nimetatakse tuletatud klassiks. Tuletatud klass võib olla ka mõne teise tuletatud klassi baasklass.



Kui loome klassi XYZ, koos mõne atribuudi ja meetodiga. Nüüd on klassiõpilasel veel mõned atribuudid, kuid see sisaldab ka XYZ klassi elemente ja sama kehtib teaduskonna klassi kohta. Vaatame skeemi:

Niisiis, üliõpilane ja õppejõudude klass päranduvad XYZ-ist.

Juurdepääsu täpsustaja Mõistsime, kuidas klass saab teise klassi pärida. Kuid mõned inimesed võivad öelda, et see on ohtlik meetod, kuna kõiki põhiklassi või vanemklassi atribuute ja meetodeid jagatakse lapseklassile või tuletatud klassile. Näiteks kui klassi „Pank” pärib klass „kliendid” ja „investorid”. Klassi „Pank” atribuute, nagu „varahäälparool”, muud kliendiga seotud andmed ja privaatsed andmed, jagatakse „klientide” ja „investorite” klassiga, mis on ohtlik.

Eespool toodud probleemi lahendamiseks kasutab C ++ juurdepääsu täpsustajaid, et piirata baasklassi atribuutide juurdepääsu tuletatud klassile. C ++ keeles on kokku 3 tüüpi juurdepääsu täpsustajaid

  1. Avalik
  2. Privaatne
  3. Kaitstud

Allpool olev tabel annab teile hea ülevaate selle kohta, millist tüüpi andmetele saab tuletatud klassi järgi juurde pääseda vastavalt erinevatele juurdepääsuspetsifikaatoritele.

Juurdepääsu täpsustaja Avalikud andmed Privaatsed andmed Kaitstud andmed
Privaatne Pole päritudPole päritudPole päritud
Kaitstud Kaitstud Privaatne Kaitstud
Avalik Avalik Privaatne Kaitstud

Ühekordne pärand

Ühekordset pärimist võib pidada tavaliseks vanillivormiks. Ühe pärandi korral pärib üks klass baasklassi.

#include kasutades nimeruumi standardklass Rong {int rataste arv int Coachtorite arv public: void Rongiteave (int n, int m) {Rataste arv = n Coachaches = m} void showinfo () {cout<Seda pärimise juhtumit nimetatakse mitmetasandiliseks pärimiseks. Esimese ja viimase klassi vaheline klass on tuntud ka kui vahepõhine klass.Mis sa arvad, kas viimane klass võib pärida esimese klassi liikmeid? Jah, saab küll

#include nimeruumi standardklassiga esimene {kaitstud: int avalik: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' < 

Väljund:

Väärtus a = 10

programmi lõpetamine javas

Väärtus b = 20

C = 30 väärtus

Väärtus d = 50

Hierarhiline pärand

Teatud probleeme ei saa lahendada ühe- või mitmetasandilise pärimise abil. Hierarhilises pärandis pärib rohkem kui 1 klass ühest põhiklassist.

#include kasutades nimeruumi standardklass 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 }

Väljund:

Oleme klassikolledžis

Oleme klassikolledžis

Mitu pärandit C ++ keeles

Nägime hierarhilises pärimises, et ühel baasklassil oli rohkem kui üks tuletatud klass. Mitme pärandi korral on ühel tuletatud klassil rohkem kui üks põhiklass.

#include nimeruumi kasutamine std klass Üks {kaitstud: int avalik: void getinfoOne (int x) {a = x}} klass kaks {kaitstud: int b public: void getinfoTwo (int y) {b = y}} klass Peamine: avalik Üks, Avalik Kaks {public: void Display () {std :: cout<< 'Value of a = ' < Siinkohal on meil hea arusaam kõigist C ++ keeles kasutatavatest pärandiliikidest. Aga oodake, mis siis, kui me tahame kasutada kahte erinevat tüüpi pärandit? Kas see on võimalik? Jah, see on võimalik hübriidse pärandi abil. Hübriidpärandis kombineerime 2 erinevat tüüpi pärandit. Näiteks - mitmetasandiline ja mitmekordne pärand, hierarhiline ja mitmekordne pärand jne.

#include nimeruumi kasutamine std class World {kaitstud: int a public: void getinfoWorld (int x) {a = x}} klass Mandril: public World {kaitstud: int b public: void getinfoContinent (int y) {b = y}} klass Riik {kaitstud: int d public: void getinfoCountry (int m) {d = m}} klass Austraalia: avalik manner, avalik riik {public: void Display () {std :: cout<< 'Value of a = ' < 

Mõistame ülaltoodud skeemi, mis aitab meil teemantiprobleemist aru saada. B-klass ja C-klass pärivad A-klassist, seega on nii A- kui ka B-klassil A-klassi atribuudid ja meetodid, kui D-klassi pärib nii B- kui ka C-klass. Sellel on ka kõik klassi A atribuudid, mis on päritud nii klassist B kui ka klassist C. Seega, kui teeme objekti D klassi ja nimetame klassi A meetodi, luuakse mitmetähenduslik olukord ja kompilaator segaduses see peaks olema A-klassi meetod B- või D-klassist.

Selle ebaselguse lahendamiseks kasutame mõistet, mida nimetatakse virtuaalseks baasklassiks. Kui teeme baasklassi virtuaalseks baasklassiks, siis päritakse ainult üks selle klassi eksemplar, sõltumata virtuaalse baasklassi ja tuletatud klassi vaheliste olemasolevate teede arvust.

klass A {} klass B: virtuaalne avalik A {} klass C: virtuaalne avalik A {} klass D: avalik C, avalik D {}

Sellega jõuame selle C ++ artikli pärandi lõpuni. Kui soovite rohkem teada saada, vaadake järgmist autor Edureka, usaldusväärne veebiõppe ettevõte. Edureka Java J2EE ja SOA koolitus- ja sertifitseerimiskursus on mõeldud selleks, et õpetada teid nii Java põhiliste kui ka edasijõudnute kontseptsioonide jaoks koos erinevate Java-raamistikega nagu Hibernate & Spring.

Kas teil on meile küsimus? Palun mainige seda selle blogi kommentaaride jaotises ja võtame teiega ühendust niipea kui võimalik.