Cursusinhoud
C++ OOP
C++ OOP
Meervoudige Overerving
Meervoudige overerving stelt een afgeleide klasse in staat om van meerdere basisklassen te erven. Dit betekent dat een enkele afgeleide klasse toegang kan hebben tot de leden (gegevens en functies) van meerdere basisklassen, waardoor hun attributen en gedrag effectief worden gecombineerd.
Horizontale meervoudige overerving
Bij dit type meervoudige overerving erft een klasse eigenschappen en methoden van meerdere superklassen op hetzelfde niveau in de overervingshiërarchie. Beschouw classes
: Shape
en Color
, elk met verschillende eigenschappen en methoden. De Shape
definieert de vorm van een object en de Color
definieert de kleur ervan.
Shape.h
Color.h
class Shape { public: void setShape(const std::string& value) { shape = value; } std::string getShape() { return shape; } private: std::string shape; };
Laten we nu een subklasse maken genaamd ColoredShape
die eigenschappen en methoden erft van zowel de klassen Shape
als Color
.
ColoredShape.h
#include "Shape.h" #include "Color.h" class ColoredShape : public Shape, public Color { public: void describe() { std::cout << "This object is a " << getShape() << " shape and is " << getColor() << '\n'; } };
Verticale overerving
Bij diepte-overerving erft een class
eigenschappen en methoden van zijn directe ouder en diens voorouders, waardoor een overervingsketen ontstaat. Neem bijvoorbeeld de class
Vehicle
, die als basis kan dienen voor overerving door Car
, Truck
en anderen. In ons voorbeeld gebruiken we de Car
om het concept te illustreren.
Vehicle.h
Car.h
class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };
Om verticale overerving te bereiken, moet je een hiërarchie opzetten waarbij de ene class
erft van een andere, en vervolgens een volgende klasse erft van de eerste, enzovoort. We kunnen een ElectricCar
maken die alle eigenschappen en functionaliteiten erft van de Car
, die op zijn beurt erft van de Vehicle
, waarmee een complexe meervoudige overervingsstructuur wordt gecreëerd.
ElectricCar.h
#include "Car.h" class ElectricCar : public Car { public: void charge() { std::cout << "Electric car is charging"; } };
Waarom Meervoudige Overerving Nodig Is
Meervoudige overerving biedt flexibiliteit en hergebruik van code in situaties waarin een class
gedrag of kenmerken van meer dan één ouder-class
moet vertonen. Hier zijn enkele scenario's waarin meervoudige overerving voordelig is:
Reële rollen: een vliegende vogel kan eigenschappen combineren van zowel de
Flying
als deBird
class, waarmee beide vaardigheden worden weergegeven. DeFlying
class kan ook van toepassing zijn op vliegtuigen of andere vliegende objecten.Code hergebruik: meervoudige overerving maakt het mogelijk voor een class om eigenschappen van verschillende basisklassen te hergebruiken zonder duplicatie.
Gerichte interfaces: stimuleert het combineren van kleine, specifieke interfaces in plaats van één grote, algemene interface te gebruiken.
Splits een complex object op in eenvoudigere objecten en gebruik meervoudige overerving om flexibele en onderhoudbare software te creëren.
Bedankt voor je feedback!