C ++ Arv

C Inheritance



Arv er et meget vigtigt træk ved objektorienteret programmering. Det giver programmereren mulighed for at udlede en klasse fra en eksisterende klasse. Dette er meget nyttigt især i et stort komplekst projekt, fordi det giver programmereren mulighed for at genbruge koden.

I denne artikel vil vi diskutere arvskonceptet i C ++ programmering. Vi vil forklare begrebet venefunktionen i C ++ med eksempler på arbejde.







Hvorfor arv?

Arv gør det muligt at oprette en ny klasse eller afledt klasse fra en anden klasse eller basisklasse. Den afledte klasse eller barneklassen vil have alle funktionerne i forældreklassen eller grundklassen. Vi kan genbruge koden ved hjælp af arv.



Type arv

Der er forskellige former for arv:



  1. Enkel/enkelt arv
  2. Hierarkisk arv
  3. Arv på flere niveauer
  4. Flere arv

I denne artikel vil vi kun overveje enkel/enkelt arv.





Eksempel 1:

Lad os nu se på et eksempelprogram for at forstå arvebegrebet i C ++. Vi har defineret en basisklasse og derefter afledt en anden klasse fra den. Derfor vil den afledte klasse have funktionerne (medlemmer og funktioner) fra basisklassen.

#omfatte

ved hjælp af navneområde std;

klasse Base_Class
{
offentlig:
intjeg;
ugyldigSkærm()
{
koste<< 'Visning af basisklasse' <<jeg<<endl;
}

};

klasse Derived_Class:offentlig Base_Class
{
offentlig:
ugyldigat vise()
{
koste<< 'Show of Derived Class' <<endl;
}
};

intvigtigste()
{
Derived_Class dc;
dc.jeg = 100;
dc.Skærm();
dc.at vise();

Vend tilbage 0;
}



Eksempel 2:

Dette er et andet eksempel på arv i C ++. I dette eksempel vil vi se, hvordan konstruktørerne kaldes, når et afledt klasseobjekt oprettes.

Som du kan se nedenfor, har vi defineret to basisklasse konstruktører og tre afledte klasse konstruktører. Du kan tydeligt bemærke fra nedenstående output, at basisklasse -konstruktøren kaldes først, før den afledte klasse -konstruktor kaldes.

#omfatte
ved hjælp af navneområde std;

klasse Base_Class
{
offentlig:
Base_Class()
{
koste<< 'Base_Class - Ingen parametre' <<endl;
}
Base_Class(intx)
{
koste<< 'Base_Class - Parametre:' <<x<<endl;
}
};

klasse Derived_Class:offentlig Base_Class
{
offentlig:
Derived_Class()
{
koste<< 'Derived_Class - Ingen parametre' <<endl;
}
Derived_Class(intog)
{
koste<< 'Derived_Class - Parametre:' <<og<<endl;
}
Derived_Class(intx,intog):Base_Class(x)
{
koste<< 'Param of Derived_Class:' <<og<<endl;
}
};

intvigtigste()
{
Afledt_Klasse d(7,19);
}

Eksempel 3:

I dette eksempel vil vi se, hvordan afledte klasseobjekter kan bruges.

Som du kan se, er der to klasser defineret: Rectangle_Class og Cube_Class. Rectangle_Class er basisklassen, hvorfra den afledte klasse, dvs. Cube_Class er afledt. Derfor arver vi funktionerne fra Rectangle_Class til Cube_Class.

Du kan også bemærke, at vi arver Cube_Class med den offentlige adgangskontrol. Det betyder, at den afledte klasse kan få adgang til alle de ikke-private medlemmer af basisklassen.

Vi har erklæret et objekt for den afledte klasse og kalder derefter metoderne fra basisklassen, dvs. setLength () og setBreadth ().

#omfatte

ved hjælp af navneområde std;

klasse Rectangle_Class
{
privat:
intlængde;
intbredde;
offentlig:
Rektangel_Klasse();
Rektangel_Klasse(intdet,intb);
Rektangel_Klasse(Rektangel_Klasse&r);
intgetLength()
{
Vend tilbagelængde;
}
intgetBreadth()
{
Vend tilbagebredde;
}
ugyldigsetLængde(intdet);
ugyldigsætBredde(intb);
intareal();
};

klasse Cube_Class:offentlig Rectangle_Class
{
privat:
inthøjde;
offentlig:
Cube_Class(inth)
{
højde=h;
}
intgetHeight()
{
Vend tilbagehøjde;
}
ugyldigsetHeight(inth)
{
højde=h;
}
intbind()
{
Vend tilbagegetLength()*getBreadth()*højde;
}
};


Rektangel_Klasse::Rektangel_Klasse()
{
længde=1;
bredde=1;
}
Rektangel_Klasse::Rektangel_Klasse(intdet,intb)
{
længde=det;
bredde=b;
}
Rektangel_Klasse::Rektangel_Klasse(Rektangel_Klasse&r)
{
længde=r.længde;
bredde=r.bredde;
}
ugyldigRektangel_Klasse::setLængde(intdet)
{
længde=det;
}
ugyldigRektangel_Klasse::setBreadth(intb)
{
bredde=b;
}
intRektangel_Klasse::areal()
{
Vend tilbagelængde*bredde;
}

intvigtigste()
{
Cube_Class c(8);
c.setLængde(12);
c.setBreadth(9);
koste<<'Lydstyrke er'<<c.bind()<<endl;
}

Konklusion:

I denne artikel har jeg forklaret begrebet arv i C ++ . C ++ understøtter forskellige arvstyper, herunder flere arv (dvs. arvelige funktioner fra flere baseklasser eller forældreklasser). For at gøre det enklere har jeg dog kun overvejet en enkelt arv her. Jeg har vist tre arbejdseksempler for at forklare, hvordan vi kan bruge arv i C ++-programmering og genbruge koden. Desuden er dette en meget nyttig funktion i C ++.