C ++ Flere arv

C ++ Flere arv
Arv er prosessen med å forbedre og utvide de eksisterende klassene uten å forårsake noen endring i dem. Dette forårsaker et hierarkisk forhold mellom klassene. Arv i programmeringsspråket C ++ er avledet i 5 hovedtyper. Som er:
  • Enkelt arv
  • Flere arv
  • Hierarkisk arv
  • Arv på flere nivåer
  • Hybrid arv

Her er vårt diskusjonsemne flere arv.

Flere arv

Flere arv oppstår når mer enn en klasse fungerer som foreldreklasse. På programmeringsspråket C ++ kan vi utlede en klasse fra baseklassen, men også vi kan utlede en klasse fra de klassene som også er avledet fra en annen baseklasse. Vi kaller denne typen arv for flere arv. Under denne prosessen oppstår også noen problemer; Disse blir forklart senere i guiden.

Formålet med arv

Arv er en av de nyttige og viktige tilnærmingene til OOP (objektorientert programmering). Hovedformålet med å bruke arv i OOP eller C ++ er å gjøre det mulig for brukeren å bruke kildekoden på nytt. I stedet for å skrive den samme koden flere ganger, kan vi ganske enkelt bruke arv for å arve egenskapene til en baseklasse til barneklassen. Dette reduserer også kompleksiteten i kildekoden.

Syntaksen for flere arv er:

klasse 1
;
Klasse 2: public 1
;
Klasse 3: public 2
;

For å arve en hvilken som helst klasse, er navnet på barneklassen skrevet på venstre side, mens foreldreklassen er skrevet på høyre side, og dette er atskilt av en kolon. I syntaks ovenfor er klasse 2 avledet fra klasse 1, og klasse 3 er avledet fra klasse 2.

Implementering av flere arv

Eksempel 1

Dette eksemplet er en prøvebruk av arv ettersom flere arv inneholder et barn med to foreldre. Så her er klasse C en barneklasse, mens klasse A og klasse B er foreldreklasser. Hver klasse inkluderer en konstruktør som viser en melding når klasseobjektet opprettes. Å bruke biblioteket iostream hjelper med å erklære CIN, cout -funksjonaliteter. Begge foreldreklassene er erklært på noen måte, men mens vi erklærer barneklassen, må vi nevne begge foreldreklassene som er arvet fra barneklassen. Her må rekkefølgen på begge klassene holdes i tankene. Klassen som er erklært først, må nevnes sist.

I det gitte eksempel opprettes for eksempel klasse A først i kildekoden som skal nevnes etter B, og klasse B vil bli nevnt først.

Klasse C: Offentlig B, offentlig a

Vi vil lage et objekt for bare barneklassen i hovedprogrammet, som i arveprosessen, får barneklasseobjekt automatisk tilgang til overordnet klasse. Lagre nå filen med '.c 'utvidelse, kompiler koden gjennom en G ++ -kompilator. '-o' brukes til å lagre filens utdata.

$ g ++ -o multi -multi.c
$ ./multi

Ved vellykket utførelse vises svaret. Du kan se at konstruktør i klasse B vil bli utført først bare på grunn av den nødvendige ordren, selv om den ble erklært senere, blir konstruktøren av klasse A utført, og på slutten blir selve barneklassen utført.

Eksempel 2

Her er et eksempel på flere arv der en "dukke" -dukke "inneholder to foreldre, et leketøy og en plushtoy. Disse klassene er erklært på samme måte som vi gjorde i det siste eksemplet. Hver konstruktør er opprettet for begge foreldreklassene. Den tredje klassen, barneklassen, er bare erklært, men konstruktøren er ikke opprettet; Det er bare en erklæring. Her endres ordren for erklæring fra foreldreklassen, ettersom klasseleken blir erklært først, må nevnes senere, men på tidspunktet for å erklære barneklasse nevnes den først; Tilsvarende erklæres plushtoy senere også nevnt etter klassens leketøy.

Mens de oppretter objektet, vil foreldreklassekonstruktørene bli utført avhengig av den nevnte ordren mens de erklærer barneklassen.

Utfør nå koden; Du vil se at konstruktøren til overordnede leketøy blir henrettet først, og deretter blir konstruktøren av klassen "plushtoy" utført.

Eksempel 3

Et diamantproblem oppstår i situasjonen når to foreldre (superklasse) har en felles baseklasse. For eksempel har barn C to foreldre, A og B, og disse tilhører begge en enkelt baseklasse D. Så barneklasse C vil indirekte inneholde to kopier av klasse D, noe som fører til tvetydighet. Dette problemet blir forklart via C ++ kildekode.

En klasseperson er opprettet som en baseklasse og har en konstruktør for å vise en melding. Et annet klassefakultet er opprettet som er et barn av baseklasse 'person' og har en konstruktør i den offentlige delen av klassen. I likhet med fakultetet er det også opprettet en klassestudent som arver fra foreldreklassepersonen.

Fakultet og studenter blir superklasseforeldre i begge klasser når en klasse TA er avledet av dem. Denne barneklassen TA er erklært ved å ha navnene på begge foreldreklassene.

Klasse TA: Offentlig fakultet: Offentlig student

Dette danner en diamant; To klasser arver en enkelt klasse, mens en enkelt klasse er arvet fra disse to klassene. Så indirekte vil barneklassen inneholde data fra baseklassen til foreldrene.

Objektopprettelsen vil sette i gang alle konstruktører av klassene beskrevet ovenfor.

Når programmet kjører, vil du se at fakultetsklassekonstruktøren først vil bli utført som ordren var at den ble nevnt først mens du erklærte en barneklasse. Så fakultetsklassen vil først vise personklassemeldingen og deretter meldingen; Tilsvarende vil studentklassen igjen skrive ut personklassen først og deretter meldingen. Og på slutten vises meldingen.

Hvis noen prosess eller operasjon er deklarert i baseklassen, vil den bli kopiert to ganger. Dette vil forårsake tvetydighet.

For å fjerne dette problemet er det en løsning. Nøkkelordet 'virtuelt' brukes i dette aspektet. Bruke det virtuelle nøkkelordet med foreldreklassen, fakultetet, og studenten vil unngå å lage to eksemplarer av en baseklasse. Dette brukes på et eksempel som vises nedenfor.

Den gjenværende koden er den samme. Dette vil fungere slik at baseklassekonstruktøren (personen) kalles som standard når objektet opprettes. Dette vil eliminere duplisering av den samme meldingen eller en hvilken som helst operasjon.

Nå vil vi utføre koden for å se resultatene. Baseklassekonstruktøren utføres bare en eneste gang.

Konklusjon

'Flere arv C ++' inneholder den grunnleggende forklaringen av arv og inkluderer den i koden. Noen elementære eksempler implementeres i C ++ for å forklare arbeidet med flere arv. Denne guiden kommer med noen større arvsproblemer som diamantproblemet. Det er utdypet i detalj, og også løsningen på den blir også fremhevet. Forhåpentligvis vil denne innsatsen være en kilde til fullstendig kunnskap for de nye brukerne.