Multipel Arv
Multipel arv tillader en afledt klasse at arve fra flere basisklasser. Dette betyder, at en enkelt afledt klasse kan få adgang til medlemmer (data og funktioner) fra flere basisklasser og dermed kombinere deres egenskaber og adfærd.
Horisontal multipel arv
Ved denne type multipel arv arver en klasse egenskaber og metoder fra flere superklasser på samme niveau i arvshierarkiet. Overvej classes: Shape og Color, som hver har forskellige egenskaber og metoder. Shape definerer formen på et object, og Color definerer dets farve.
Shape.h
Color.h
1234567class Shape { public: void setShape(const std::string& value) { shape = value; } std::string getShape() { return shape; } private: std::string shape; };
Lad os nu oprette en subklasse kaldet ColoredShape, der arver egenskaber og metoder fra både klasserne Shape og 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'; } };
Vertikal arv
Ved dybdearv arver en class egenskaber og metoder fra sin direkte forælder og dens forfædre, hvilket danner en arve-kæde. For eksempel kan class Vehicle fungere som grundlag for arv for Car, Truck og andre. I vores eksempel vil vi benytte Car til at illustrere konceptet.
Vehicle.h
Car.h
12345class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };
For at opnå vertikal arv, skal du oprette et hierarki, hvor én class arver fra en anden, og derefter arver en efterfølgende klasse fra den første, og så videre. Vi kan oprette en ElectricCar, der arver alle egenskaber og funktionaliteter fra Car, som selv arver fra Vehicle, hvilket etablerer en kompleks multipel arv struktur.
ElectricCar.h
123456#include "Car.h" class ElectricCar : public Car { public: void charge() { std::cout << "Electric car is charging"; } };
Hvorfor er multipel arv nødvendig
Multipel arv giver fleksibilitet og genbrug af kode i situationer, hvor en class skal udvise egenskaber eller karakteristika fra mere end én forældre-class. Her er nogle scenarier, hvor multipel arv er fordelagtig:
-
Virkelige roller: en flyvende fugl kan kombinere egenskaber fra både
FlyingogBirdklasserne, hvilket repræsenterer begge evner.Flyingklassen kan også anvendes på fly eller andre flyvende objekter. -
Genbrug af kode: multipel arv gør det muligt for en klasse at genbruge funktioner fra forskellige basisklasser uden duplikering.
-
Fokuserede grænseflader: opmuntrer til at kombinere små, specifikke grænseflader i stedet for at bruge én stor, generel.
Opdel et komplekst objekt i enklere dele og udnyt multipel arv til at skabe fleksibel og vedligeholdelsesvenlig software.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Spørg mig spørgsmål om dette emne
Opsummér dette kapitel
Vis virkelige eksempler
Awesome!
Completion rate improved to 3.13
Multipel Arv
Stryg for at vise menuen
Multipel arv tillader en afledt klasse at arve fra flere basisklasser. Dette betyder, at en enkelt afledt klasse kan få adgang til medlemmer (data og funktioner) fra flere basisklasser og dermed kombinere deres egenskaber og adfærd.
Horisontal multipel arv
Ved denne type multipel arv arver en klasse egenskaber og metoder fra flere superklasser på samme niveau i arvshierarkiet. Overvej classes: Shape og Color, som hver har forskellige egenskaber og metoder. Shape definerer formen på et object, og Color definerer dets farve.
Shape.h
Color.h
1234567class Shape { public: void setShape(const std::string& value) { shape = value; } std::string getShape() { return shape; } private: std::string shape; };
Lad os nu oprette en subklasse kaldet ColoredShape, der arver egenskaber og metoder fra både klasserne Shape og 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'; } };
Vertikal arv
Ved dybdearv arver en class egenskaber og metoder fra sin direkte forælder og dens forfædre, hvilket danner en arve-kæde. For eksempel kan class Vehicle fungere som grundlag for arv for Car, Truck og andre. I vores eksempel vil vi benytte Car til at illustrere konceptet.
Vehicle.h
Car.h
12345class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };
For at opnå vertikal arv, skal du oprette et hierarki, hvor én class arver fra en anden, og derefter arver en efterfølgende klasse fra den første, og så videre. Vi kan oprette en ElectricCar, der arver alle egenskaber og funktionaliteter fra Car, som selv arver fra Vehicle, hvilket etablerer en kompleks multipel arv struktur.
ElectricCar.h
123456#include "Car.h" class ElectricCar : public Car { public: void charge() { std::cout << "Electric car is charging"; } };
Hvorfor er multipel arv nødvendig
Multipel arv giver fleksibilitet og genbrug af kode i situationer, hvor en class skal udvise egenskaber eller karakteristika fra mere end én forældre-class. Her er nogle scenarier, hvor multipel arv er fordelagtig:
-
Virkelige roller: en flyvende fugl kan kombinere egenskaber fra både
FlyingogBirdklasserne, hvilket repræsenterer begge evner.Flyingklassen kan også anvendes på fly eller andre flyvende objekter. -
Genbrug af kode: multipel arv gør det muligt for en klasse at genbruge funktioner fra forskellige basisklasser uden duplikering.
-
Fokuserede grænseflader: opmuntrer til at kombinere små, specifikke grænseflader i stedet for at bruge én stor, generel.
Opdel et komplekst objekt i enklere dele og udnyt multipel arv til at skabe fleksibel og vedligeholdelsesvenlig software.
Tak for dine kommentarer!