Meervoudige Overerving
Meervoudige overerving stelt een afgeleide klasse in staat om te erven van meerdere basisklassen. Dit betekent dat een enkele afgeleide klasse toegang kan hebben tot de leden (gegevens en functies) van meerdere basisklassen, waardoor hun attributen en gedragingen 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
1234567class 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
123456789#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
12345class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };
Om verticale overerving te bereiken, moet een hiërarchie worden opgezet waarbij de ene class erft van een andere, en vervolgens een volgende klasse weer erft van de eerste, enzovoort. We kunnen een ElectricCar maken die alle eigenschappen en functionaliteiten van de Car erft, die op zijn beurt weer erft van de Vehicle, waarmee een complexe meervoudige overervingsstructuur wordt vastgesteld.
ElectricCar.h
123456#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 eigenschappen 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 kenmerken combineren van zowel de
Flyingals deBirdclass, waarmee beide vaardigheden worden weergegeven. DeFlyingclass kan ook van toepassing zijn op vliegtuigen of andere vliegende objecten. -
Code hergebruik: meervoudige overerving maakt het mogelijk om functies 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!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 3.13
Meervoudige Overerving
Veeg om het menu te tonen
Meervoudige overerving stelt een afgeleide klasse in staat om te erven van meerdere basisklassen. Dit betekent dat een enkele afgeleide klasse toegang kan hebben tot de leden (gegevens en functies) van meerdere basisklassen, waardoor hun attributen en gedragingen 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
1234567class 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
123456789#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
12345class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };
Om verticale overerving te bereiken, moet een hiërarchie worden opgezet waarbij de ene class erft van een andere, en vervolgens een volgende klasse weer erft van de eerste, enzovoort. We kunnen een ElectricCar maken die alle eigenschappen en functionaliteiten van de Car erft, die op zijn beurt weer erft van de Vehicle, waarmee een complexe meervoudige overervingsstructuur wordt vastgesteld.
ElectricCar.h
123456#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 eigenschappen 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 kenmerken combineren van zowel de
Flyingals deBirdclass, waarmee beide vaardigheden worden weergegeven. DeFlyingclass kan ook van toepassing zijn op vliegtuigen of andere vliegende objecten. -
Code hergebruik: meervoudige overerving maakt het mogelijk om functies 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!