types inheritance c
Ontdek alle soorten overerving in C ++ met voorbeelden.
In onze vorige tutorial hebben we geleerd over overerving in C ++. Afhankelijk van de manier waarop de klasse is afgeleid of hoeveel basisklassen een klasse erft, hebben we de volgende soorten overerving:
- Enkele erfenis
- Meerdere overerving
- Overerving op meerdere niveaus
- Hiërarchische overerving
- Hybride overerving
Zie hier om de volledige lijst met C ++ - zelfstudies te verkennen.
Wat je leert:
Soorten erfenis
Hieronder vindt u een picturale weergave van de verschillende soorten overerving.
We zullen elk type overerving zien met voorbeelden in de onderstaande secties.
# 1) Eenmalige erfenis
Bij eenmalige overerving is een klasse slechts afkomstig van één basisklasse. Dit betekent dat er maar één subklasse is die is afgeleid van één superklasse.
Eenmalige overerving wordt meestal als volgt verklaard:
Hieronder is een compleet voorbeeld van eenmalige erfenis gegeven.
Uitgang:
Hond heeft 4 poten
Hond heeft 1 staart
Hond blaft!!!
We hebben een klasse Dier als basisklasse waaruit we een subklasse hond hebben afgeleid. Klasse hond erft alle leden van de klasse Dier en kan worden uitgebreid met zijn eigen eigenschappen, zoals blijkt uit de uitvoer.
Eenmalige overerving is de eenvoudigste vorm van overerving.
# 2) Meervoudige overerving
Meervoudige overerving wordt hieronder geïllustreerd weergegeven.
Meervoudige overerving is een type overerving waarbij een klasse is afgeleid van meer dan één klasse. Zoals getoond in het bovenstaande diagram, is klasse C een subklasse met klasse A en klasse B als ouder.
In een realistisch scenario erft een kind van zijn vader en moeder. Dit kan worden beschouwd als een voorbeeld van meervoudige overerving.
We presenteren het onderstaande programma om meervoudige overerving te demonstreren.
Uitgang:
Voer het rolnummer in: 25
Voer de twee hoogste cijfers in: 40 50
Voer het cijfer in voor CoCurricular-activiteiten: 30
Rol nr: 25
Totaal aantal punten: 120
Gemiddelde cijfers: 40
In het bovenstaande voorbeeld hebben we drie klassen, d.w.z. student_marks, cocurricular_marks en Resultaat. De class student_marks leest het onderwerpcijfer voor de student. De klas cocurricular_marks leest de cijfers van de student in co-curriculaire activiteiten.
De klasse Resultaat berekent het totaal aantal punten voor de student samen met de gemiddelde cijfers.
In dit model wordt de resultaatklasse afgeleid van student_marks en cocurricular_marks terwijl we het resultaat berekenen op basis van het onderwerp en de cijfers voor co-curriculaire activiteiten.
Dit vertoont meerdere erfenissen.
Diamond probleem
Diamond Probleem wordt hieronder picturaal weergegeven:
hoe u een nep-bedrijfse-mail-ID maakt
Hier hebben we een kinderklasse die twee klassen vader en moeder erft. Deze twee klassen erven op hun beurt de klasse Persoon.
Zoals te zien is in de figuur, erft klasse Kind de eigenschappen van klasse Persoon tweemaal, d.w.z. eenmaal van vader en de tweede keer van moeder. Dit geeft aanleiding tot dubbelzinnigheid, aangezien de compiler niet begrijpt welke kant hij op moet.
Aangezien dit scenario zich voordoet wanneer we een ruitvormige erfenis hebben, wordt dit probleem bekend als ' Het diamantprobleem
Het Diamond-probleem geïmplementeerd in C ++ resulteert in een dubbelzinnigheidsfout bij het compileren. We kunnen dit probleem oplossen door de root-basisklasse virtueel te maken. We zullen meer leren over het 'virtuele' sleutelwoord in onze aanstaande tutorial over polymorfisme.
# 3) Overerving op meerdere niveaus
Overerving op meerdere niveaus wordt hieronder weergegeven.
Bij overerving op meerdere niveaus wordt een klasse afgeleid van een andere afgeleide klasse. Deze overerving kan net zoveel niveaus hebben, zolang onze implementatie maar niet afwijkt. In het bovenstaande diagram is klasse C afgeleid van klasse B. Klasse B is op zijn beurt afgeleid van klasse A.
Laten we eens kijken naar een voorbeeld van overerving op meerdere niveaus.
Uitgang:
Puppy heeft 4 poten
Puppy heeft 1 staart
Puppy blaft !!! Puppy huilt !!
Hier hebben we het voorbeeld voor Enkelvoudige overerving aangepast zodat er een nieuwe klasse Puppy is die erft van de klasse Dog die op zijn beurt erft van klasse Animal. We zien dat de klasse Puppy de eigenschappen en methoden van beide klassen erboven verwerft en gebruikt.
# 4) Hybride overerving
Hybride overerving wordt hieronder weergegeven.
Hybride overerving is meestal een combinatie van meer dan één type overerving. In de bovenstaande weergave hebben we meervoudige overerving (B, C en D) en overerving op meerdere niveaus (A, B en D) om een hybride overerving te krijgen.
Laten we eens kijken naar een voorbeeld van hybride overerving.
Uitgang:
Voer student-ID en studentnaam 25 Ved in
Voer 3 onderwerpmarkeringen in: 89 88 87
Sportcijfers invoeren: 40
Totaal aantal punten = 264
Gemiddelde cijfers = 88
Gemiddelde + sportcijfers = 128
Hier hebben we vier klassen, namelijk Student, Cijfers, Sport en Resultaat. Cijfers zijn afgeleid van de leerlingklasse. De klasse Resultaat is afgeleid van Marks and Sports, aangezien we het resultaat berekenen op basis van zowel de subjectmarkeringen als de sportcijfers.
De uitvoer wordt gegenereerd door een object van klasse Result te maken dat de eigenschappen van alle drie de klassen heeft verworven.
Merk op dat ook bij hybride overerving de implementatie kan resulteren in 'Diamantprobleem' dat kan worden opgelost met behulp van het 'virtuele' sleutelwoord zoals eerder vermeld.
# 5) Hiërarchische overerving
Bij hiërarchische overerving erft meer dan één klasse van een enkele basisklasse, zoals weergegeven in de bovenstaande weergave. Dit geeft het een structuur van een hiërarchie.
Hieronder wordt het voorbeeld gegeven dat hiërarchische overerving demonstreert.
Uitgang:
Voer de lengte en breedte van een rechthoek in: 10 5
Oppervlakte van de rechthoek = 50
Voer de basis en hoogte van de driehoek in: 4 8
Oppervlakte van de driehoek = 16
Voer de lengte van één zijde van het vierkant in: 5
Oppervlakte van het vierkant = 20
Het bovenstaande voorbeeld is een klassiek voorbeeld van klasse Shape. We hebben een basisklasse Shape en drie klassen, d.w.z. rechthoek, driehoek en vierkant, zijn hiervan afgeleid.
We hebben een methode om gegevens in de Shape-klasse te lezen, terwijl elke afgeleide klasse zijn eigen methode heeft om de oppervlakte te berekenen. In de hoofdfunctie lezen we gegevens voor elk object en berekenen we vervolgens het gebied.
Gevolgtrekking
In vergelijking met de andere programmeertalen ondersteunt de C ++ -taal alle soorten overerving. We kunnen zelfs zeggen dat C ++ een zeer goede ondersteuning biedt voor overerving. We kunnen real-time problemen effectiever modelleren met C ++.
In deze tutorial hebben we alle soorten overerving gezien die worden ondersteund door C ++.
Lees ook = >> Soorten overerving in Java
In onze aanstaande tutorial zullen we meer leren over de polymorfismefunctie van OOP.
Bekijk hier de complete C ++ GRATIS trainingsreeks.
Aanbevolen literatuur
- Overerving in C ++
- C ++ gegevenstypen
- Soorten risico's in softwareprojecten
- Python-gegevenstypen
- Beste GRATIS C # Tutorial-serie: de ultieme C # -gids voor beginners
- Unix Shell Loop-typen: Do While Loop, For Loop, tot Loop in Unix
- Verschillende soorten Matchers aangeboden door Mockito
- 7 soorten softwarefouten die elke tester moet weten