Allt du behöver veta om arv i C ++



Den här artikeln kommer att ge dig en detaljerad och omfattande kunskap om arv i C ++, det är olika typer och hur du implementerar det.

C ++ är ett objektorienterat språk. Dataabstraktion, polymorfism, inkapsling och arv är hörnstenarna i OOP. I det här inlägget kommer vi att förstå vad som är arv? Typer av arv i C ++ och alla nödvändiga begrepp relaterade till det från grunden. Till slut kommer vi också att titta på nackdelen med detta kraftfulla koncept och försöka lösa det.

Vad är arv i C ++

Arv är ett av de kraftfullaste och mest använda begreppen i C ++ eller något annat objektorienterat språk. Att förstå detta koncept kräver lite kunskap om klasser och objekt. Med hjälp av arv kan vi skapa en klass som består av allmänna metoder och attribut. Denna klass kan ärvas av andra klasser som innehåller mer specifika metoder.





Arv i C ++

Genom att göra detta behöver vi inte skriva samma funktioner om och om igen vilket sparar tid och ökar läsbarheten för kod.



Syntax:

class derivated_class: access_type base_class {// class body}

Basklass: Den klass som består av alla allmänna metoder och attribut som kan delas av andra klasser för att öka kodläsbarheten kallas en basklass.

Avledad klass: Klassen som består av mer specifika metoder och ärver en klass kallas en härledd klass. En härledd klass kan också vara en basklass för någon annan härledd klass.



Om vi ​​skapar en klass XYZ, med några attribut och metoder. Nu kommer en klassstudent att ha några andra attribut, men det kommer också att inkludera elementen i XYZ-klassen och detsamma gäller för en fakultetsklass. Låt oss se ett diagram:

Så, student- och fakultetsklassen kommer att ärva från XYZ.

Access specificer- Vi förstod hur en klass kan ärva en annan klass. Men vissa människor kanske säger att det är en osäker metod eftersom alla attribut och metoder för basklassen eller föräldraklassen delas med barnklassen eller den härledda klassen. Till exempel om en klass 'Bank' ärvs av klassen 'kunder' och 'investerare'. Attribut från klassen 'Bank' som 'valvlösenord', annan kundrelaterad information och privat data delas med 'kunder' och 'investerare' -klassen som är osäker.

För att lösa ovanstående problem använder C ++ åtkomstspecifikatorer för att begränsa åtkomsten till basklassattribut till den härledda klassen. Det finns totalt 3 typer av åtkomstspecifikatorer i C ++

  1. offentlig
  2. Privat
  3. Skyddade

Tabellen nedan ger dig en god förståelse för vilken typ av data som kan nås av härledd klass enligt olika åtkomstspecifikatorer.

Access Specifier Offentliga uppgifter Privata data Skyddade data
Privat Inte ärvtInte ärvtInte ärvt
Skyddade Skyddade Privat Skyddade
offentlig offentlig Privat Skyddade

Enstaka arv

Enstaka arv kan betraktas som en vanlig vaniljform av arv. I enstaka arv ärver en enda klass från en basklass.

#include using namespace std class Train {int Numberofwheels int Numberofcoaches public: void Traininfo (int n, int m) {Numberofwheels = n Numberofcoaches = m} void showinfo () {cout<Detta fall av arv kallas som Multilevel-arv. Klassen mellan första och sista klassen är också känd som en mellanliggande basklass.Vad tror du, kan den sista klassen ärva medlemmar i den första klassen? Ja, det kan det

#include using namespace std class First {protected: int a public: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' < 

Produktion:

Värde a = 10

Värde på b = 20

hur man gör en rad objekt

Värde av c = 30

Värde av d = 50

Hierarkisk arv

Vissa problem kan inte lösas med hjälp av enstaka arv eller flera nivåer. I hierarkisk arv ärver mer än 1 klass från en enda basklass.

#include using namespace std class 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 }

Produktion:

Vi är i klass College

Vi är i klass College

Multipel arv i C ++

Vi såg i hierarkisk arv att en basklass hade mer än en härledd klass. I flera arv har en härledd klass mer än en basklass.

#include using namespace std class One {skyddad: int en allmän: ogiltig getinfoOne (int x) {a = x}} klass två {skyddad: int b offentlig: ogiltig getinfoTwo (int y) {b = y}} klass Huvud: public One, public Two {public: void Display () {std :: cout<< 'Value of a = ' < Vid denna tidpunkt har vi en god förståelse för alla typer av arv som används i C ++. Men vänta, om vi vill använda två olika typer av arv? Är det möjligt? Ja, det är möjligt med hjälp av hybrid arv. I hybridarv kombinerar vi två olika typer av arv. Till exempel- Multilevel och multipel arv, Hierarkisk och multipel arv, etc.

#include using namespace 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}} klass Land {skyddad: int d offentlig: ogiltig getinfoCountry (int m) {d = m}} klass Australien: offentlig kontinent, offentlig land {offentlig: ogiltig Display () {std :: cout<< 'Value of a = ' < 

Låt oss förstå ovanstående diagram som hjälper oss att förstå diamantproblemet. klass B och klass C ärver från klass A, därför har både klass A och klass B attribut och metoder av klass A. om klass D ärver från klass B såväl som klass C. klass D kommer att ha alla attribut för klass B och klass C Den har också alla attribut från klass A ärvda från klass B såväl som klass C. om vi gör ett objekt av klass D och kallar en metod för klass A. skapas en tvetydig situation och kompilatorn kommer att förväxlas från var det ska klassmetod A, från klass B eller klass D.

För att lösa denna tvetydighet använder vi ett koncept som kallas den virtuella basklassen. När vi gör en basklass en virtuell basklass ärvs bara en kopia av den klassen oavsett antalet befintliga vägar mellan den virtuella basklassen och en härledd klass.

klass A {} klass B: virtuell allmänhet A {} klass C: virtuell allmänhet A {} klass D: allmänhet C, offentlig D {}

Med detta kommer vi till ett slut på denna arv i C ++ - artikeln. Om du vill veta mer, kolla in av Edureka, ett pålitligt inlärningsföretag online. Edurekas Java J2EE- och SOA-utbildning och certifieringskurs är utformad för att träna dig för både grundläggande och avancerade Java-koncept tillsammans med olika Java-ramverk som Hibernate & Spring.

Har du en fråga till oss? Vänligen nämna det i kommentarsektionen på den här bloggen så kommer vi tillbaka till dig så snart som möjligt.