Alt du trenger å vite om arv i C ++



Denne artikkelen vil gi deg en detaljert og omfattende kunnskap om arv i C ++, det er forskjellige typer og hvordan du implementerer det.

C ++ er et objektorientert språk. Dataabstraksjon, polymorfisme, innkapsling og arv er hjørnesteinene i OOP. I dette innlegget vil vi forstå hva som er arv? Typer arv i C ++, og alle nødvendige konsepter knyttet til det fra bunnen av. Til slutt vil vi også se på ulempen med dette kraftige konseptet og prøve å løse det.

Hva er arv i C ++

Arv er et av de kraftigste og mest brukte begrepene i C ++ eller ethvert annet objektorientert språk. Å forstå dette konseptet krever litt kunnskap om klasser og objekter. Ved hjelp av arv kan vi lage en klasse som består av generelle metoder og attributter. Denne klassen kan arves av andre klasser som inneholder mer spesifikke metoder.





Arv i C ++

Ved å gjøre dette trenger vi ikke å skrive de samme funksjonene igjen og igjen, noe som sparer tid og øker lesbarheten til koden.



Syntaks:

klasse derivated_class: access_type base_class {// class body}

Grunnklasse: Klassen som består av alle generelle metoder og attributter som kan deles av andre klasser for å øke kodelesbarheten kalles en basisklasse.

Avledet klasse: Klassen som består av mer spesifikke metoder og arver en klasse kalles en avledet klasse. En avledet klasse kan også være en basisklasse for en annen avledet klasse.



Hvis vi lager en klasse XYZ, med noen attributter og metoder. Nå vil en klassestudent ha noen andre attributter, men det vil også inkludere elementene i XYZ-klassen, og det samme gjelder for en fakultetsklasse. La oss se et diagram:

Så, student- og fakultetsklassen vil arve fra XYZ.

Tilgangsspesifikator- Vi forsto hvordan en klasse kan arve en annen klasse. Men noen mennesker kan si at det er en usikker metode da alle attributtene og metodene til baseklassen eller foreldreklassen deles med barneklassen eller den avledede klassen. For eksempel hvis en klasse 'Bank' arves av klassen 'kunder' og 'investorer'. Attributter av klassen 'Bank' som 'hvelvpassord', annen kunderelatert informasjon og private data deles med 'kundene' og 'investorene' som er usikre.

For å løse problemet ovenfor bruker C ++ tilgangsspesifikatorer for å begrense tilgangen til baseklasseattributter til den avledede klassen. Det er totalt 3 typer tilgangsspesifikatorer i C ++

hvordan bli en ingeniør for kunstig intelligens
  1. Offentlig
  2. Privat
  3. Beskyttet

Tabellen nedenfor vil gi deg en god forståelse av hvilken type data som er tilgjengelige for avledet klasse i henhold til forskjellige tilgangsspesifikatorer.

Tilgangsspesifikator Offentlige data Private data Beskyttede data
Privat Ikke arvetIkke arvetIkke arvet
Beskyttet Beskyttet Privat Beskyttet
Offentlig Offentlig Privat Beskyttet

Enkeltarv

Enkel arv kan betraktes som den vanlige arven. I enkelt arv arver en enkelt klasse fra en basisklasse.

#include using namespace std class Train {int Numberofwheels int Numberofcoaches public: void Traininfo (int n, int m) {Numberofwheels = n Numberofcoaches = m} void showinfo () {cout<Dette tilfellet av arv kalles som Multilevel arv. Klassen mellom første og siste klasse er også kjent som en mellomliggende basisklasse.Hva tror du, kan den siste klassen arve medlemmer av første klasse? Ja det kan det

# inkludere bruk av navneområde std klasse Først {beskyttet: int en offentlig: ugyldig getinfofirst (int x) {a = x} ugyldig showinfofirst () {std :: cout<< 'Value of a = ' < 

Produksjon:

Verdien av a = 10

Verdien av b = 20

Verdien av c = 30

Verdien av d = 50

Hierarkisk arv

Enkelte problemer kan ikke løses ved hjelp av arv som en eller flere nivåer. I hierarkisk arv arver mer enn 1 klasse fra en enkelt baseklasse.

# inkludere bruk av namespace std klasse 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 }

Produksjon:

Vi er i klassen College

Vi er i klassen College

Flere arv i C ++

Vi så i hierarkisk arv at en basisklasse hadde mer enn en avledet klasse. I flere arv har en avledet klasse mer enn en basisklasse.

hva er datavisualisering i tablå
# inkludere bruk av navneområdet std klasse One {beskyttet: int en offentlig: ugyldig getinfoOne (int x) {a = x}} klasse to {beskyttet: int b offentlig: ugyldig getinfoTwo (int y) {b = y}} klasse Hoved: public One, public Two {public: void Display () {std :: cout<< 'Value of a = ' < På dette tidspunktet har vi god forståelse av alle typer arv som brukes i C ++. Men vent hva om vi vil bruke to forskjellige typer arv? Er det mulig? Ja, det er mulig ved hjelp av hybrid arv. I hybrid arv kombinerer vi 2 forskjellige typer arv. For eksempel- Multilevel og multiple arv, Hierarkiske og multiple arv, etc.

# inkludere bruk av navneområde std klasse Verden {beskyttet: int en offentlig: ugyldig getinfoWorld (int x) {a = x}} klasse Kontinent: offentlig verden {beskyttet: int b offentlig: ugyldig getinfoContinent (int y) {b = y}} klasse Land {protected: int d public: void getinfoCountry (int m) {d = m}} class Australia: public Continent, public Country {public: void Display () {std :: cout<< 'Value of a = ' < 

La oss forstå diagrammet ovenfor som vil hjelpe oss med å forstå diamantproblemet. klasse B og klasse C arver fra klasse A, derfor har både klasse A og klasse B attributter og metoder i klasse A. hvis klasse D arver fra klasse B så vel som klasse C. klasse D vil ha alle attributtene til klasse B og klasse C Det har også alle attributtene til klasse A arvet fra klasse B så vel som klasse C. Derfor, hvis vi lager et objekt av klasse D og kaller en metode i klasse A. vil en tvetydig situasjon bli opprettet og kompilatoren vil bli forvirret fra hvor det skal klassemetode A, fra klasse B eller klasse D.

For å løse denne tvetydigheten bruker vi et konsept som kalles den virtuelle baseklassen. Når vi lager en basisklasse, blir en virtuell baseklasse bare en kopi av den klassen arvet, uavhengig av antall eksisterende baner mellom den virtuelle baseklassen og en avledet klasse.

klasse A {} klasse B: virtuell offentlig A {} klasse C: virtuell offentlig A {} klasse D: offentlig C, offentlig D {}

Med dette kommer vi til en slutt på denne arven i C ++ - artikkelen. Hvis du ønsker å lære mer, sjekk ut av Edureka, et pålitelig online læringsfirma. Edurekas Java J2EE- og SOA-opplæring og sertifiseringskurs er designet for å trene deg for både kjerne- og avanserte Java-konsepter sammen med forskjellige Java-rammer som Hibernate & Spring.

Har du et spørsmål til oss? Vennligst nevn det i kommentarfeltet på denne bloggen, så kommer vi tilbake til deg så snart som mulig.