Viss, kas jums jāzina par mantojumu C ++



Šis raksts sniegs jums detalizētas un visaptverošas zināšanas par mantojumu C ++ versijā, tā dažādos veidos un kā to īstenot.

C ++ ir uz objektu orientēta valoda. Datu abstrakcija, polimorfisms, iekapsulēšana un mantošana ir OOP stūrakmeņi. Šajā ierakstā mēs sapratīsim, kas ir mantojums? Mantojuma veidi C ++ un visi nepieciešamie ar to saistītie jēdzieni no nulles. Galu galā mēs arī aplūkosim šīs spēcīgās koncepcijas trūkumu un mēģināsim to atrisināt.

datu struktūras un algoritmi Java apmācībā

Kas ir mantojums C ++

Mantošana ir viens no spēcīgākajiem un plaši izmantotajiem jēdzieniem C ++ vai jebkurā citā uz objektu orientētā valodā. Lai saprastu šo jēdzienu, ir nepieciešamas nedaudz zināšanas par klasēm un priekšmetiem. Izmantojot mantojumu, mēs varam izveidot klasi, kas sastāv no vispārīgām metodēm un atribūtiem. Šo klasi var pārmantot citas klases, kas satur specifiskākas metodes.





Mantojums C ++

To darot, mums atkal un atkal nav jāraksta tās pašas funkcijas, kas ietaupa laiku un palielina koda lasāmību.



Sintakse:

klases atvasinātā klase: piekļuves_tipa bāzes_klase {// klases pamatteksts}

Bāzes klase: Klasi, kas sastāv no visām vispārīgajām metodēm un atribūtiem, kurus var koplietot citas klases, lai palielinātu koda lasāmību, sauc par bāzes klasi.

Atvasinātā klase: Klase, kas sastāv no specifiskākām metodēm un manto klasi, tiek dēvēta par atvasinātu klasi. Atvasināta klase var būt arī bāzes klase kādai citai atvasinātai klasei.



Ja mēs izveidojam klasi XYZ, ar dažiem atribūtiem un metodēm. Tagad klases studentam būs daži citi atribūti, taču tajā būs iekļauti arī XYZ klases elementi, un tas pats attiecas uz mācībspēku klasi. Apskatīsim diagrammu:

Tātad studentu un mācībspēku klase mantos no XYZ.

Piekļuves specifikators- Mēs sapratām, kā klase var mantot citu klasi. Bet daži cilvēki varētu teikt, ka tā ir nedroša metode, jo visi pamatklases vai vecāku klases atribūti un metodes tiek koplietoti ar bērnu klasi vai atvasināto klasi. Piemēram, ja klasi “Banka” pārmanto klase “klienti” un “investori”. “Bankas” klases atribūti, piemēram, “vaultpassword”, cita ar klientiem saistītā informācija un privātie dati, tiek kopīgoti ar “klientu” un “investoru” klasi, kas ir nedroši.

Lai atrisinātu iepriekš minēto problēmu, C ++ izmanto piekļuves specifikatorus, lai ierobežotu piekļuvi bāzes klases atribūtiem atvasinātajai klasei. Kopā C ++ ir 3 veidu piekļuves specifikatori

  1. Publisks
  2. Privāts
  3. Aizsargāts

Zemāk esošā tabula ļaus jums labi izprast, kāda veida datiem var piekļūt atvasinātā klase atbilstoši dažādiem piekļuves specifikatoriem.

Piekļuves specifikators Publiskie dati Privātie dati Aizsargātie dati
Privāts Nav iedzimtaNav iedzimtaNav iedzimta
Aizsargāts Aizsargāts Privāts Aizsargāts
Publisks Publisks Privāts Aizsargāts

Vienreizējs mantojums

Vienreizējo mantojumu var uzskatīt par vienkāršu vaniļas formas mantojumu. Vienreizējā mantojumā viena klase manto no bāzes klases.

#include izmantojot nosaukumvietu std klase Vilciens {int Riteņu skaits int Autobusu skaits public: void Traininfo (int n, int m) {ratiņu skaits = n Coachaches skaits = m} void showinfo () {cout<Šo mantojuma gadījumu sauc par daudzlīmeņu mantojumu. Klase starp pirmo un pēdējo klasi ir pazīstama arī kā starpposma bāzes klase.Kā jūs domājat, vai pēdējā klase var mantot pirmās klases biedrus? Jā, tā var

#include izmantojot nosaukumvietas standartklasi Pirmais {aizsargāts: int a public: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' < 

Izeja:

A = 10 vērtība

B = 20 vērtība

C = 30 vērtība

Vērtība d = 50

Hierarhiskā mantošana

Atsevišķas problēmas nevar atrisināt, izmantojot vienreizēju vai daudzlīmeņu mantojumu. Hierarhiskajā mantojumā vairāk nekā 1 klase manto no vienas bāzes klases.

#include izmantojot nosaukumvietas std klasi 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 }

Izeja:

Mēs esam klases koledžā

Mēs esam klases koledžā

Daudzkārtējs mantojums C ++

Mēs redzējām hierarhiskajā mantojumā, ka vienai pamatklasei bija vairāk nekā viena atvasināta klase. Vairākos mantojumos vienai atvasinātai klasei ir vairāk nekā viena bāzes klase.

#include, izmantojot nosaukumvietas std klasi One {protected: int a public: void getinfoOne (int x) {a = x}} klase Two {protected: int b public: void getinfoTwo (int y) {b = y}} klase Main: public One, public Two {public: void Display () {std :: cout<< 'Value of a = ' < Šajā brīdī mums ir laba izpratne par visiem C ++ izmantotajiem mantojuma veidiem. Bet pagaidiet, ja mēs vēlamies izmantot 2 dažādus mantojuma veidus? Vai tas ir iespējams? Jā, tas ir iespējams ar hibrīda mantojuma palīdzību. Hibrīdā mantojumā mēs apvienojam 2 dažādus mantojuma veidus. Piemēram - daudzlīmeņu un vairākkārtēja mantošana, hierarhiska un vairākkārtēja mantošana utt.

#include izmantojot nosaukumvietu std class World {aizsargāts: int a public: void getinfoWorld (int x) {a = x}} klase Kontinents: public World {aizsargāts: int b public: void getinfoContinent (int y) {b = y}} klase Valsts {aizsargāta: int d public: void getinfoCountry (int m) {d = m}} klase Austrālija: publiskais kontinents, valsts Valsts {public: void Display () {std :: cout<< 'Value of a = ' < 

Ļaujiet mums saprast iepriekšējo diagrammu, kas mums palīdzēs izprast dimanta problēmu. B un C klase manto no A klases, tāpēc gan A, gan B klasei ir A klases atribūti un metodes, ja D klase manto no B klases, kā arī C klasei, D klasei būs visi B un C klases atribūti Tam ir arī visi A klases atribūti, kas mantoti no B klases, kā arī C, līdz ar to, ja mēs izveidosim D klases objektu un izsauksim par A klases metodi, tiks izveidota neskaidra situācija, un kompilators tiks sajaukts no vietas tai vajadzētu būt A klases metodei no B klases vai D klases.

Lai atrisinātu šo neskaidrību, mēs izmantojam jēdzienu, ko sauc par virtuālo bāzes klasi. Kad mēs izveidojam bāzes klasi par virtuālo bāzes klasi, tiek mantota tikai viena šīs klases kopija neatkarīgi no esošo ceļu skaita starp virtuālo bāzes klasi un atvasināto klasi.

A klase {} B klase: virtuālā publiskā A {} C klase: virtuālā publiskā A {} D klase: publiskā C, publiskā D {}

Ar to mēs esam nonākuši pie šī mantojuma C ++ rakstā. Ja vēlaties uzzināt vairāk, iepazīstieties ar Autors: uzticams tiešsaistes mācību uzņēmums Edureka. Edureka Java J2EE un SOA apmācības un sertifikācijas kurss ir paredzēts, lai apmācītu jūs gan galvenajiem, gan uzlabotajiem Java jēdzieniem kopā ar dažādiem Java ietvariem, piemēram, Hibernate & Spring.

Vai mums ir jautājums? Lūdzu, pieminējiet to šī emuāra komentāru sadaļā, un mēs sazināsimies ar jums pēc iespējas ātrāk.