Kursinnehåll
C++ OOP
C++ OOP
Multipelt arv
Multipelt arv tillåter en härledd klass att ärva från flera basklasser. Detta innebär att en enskild härledd klass kan få tillgång till medlemmarna (data och funktioner) från flera basklasser, vilket effektivt kombinerar deras attribut och beteenden.
Horisontellt multipelt arv
Vid denna typ av multipelt arv ärver en klass egenskaper och metoder från flera superklasser på samma nivå i arvshierarkin. Tänk på classes
: Shape
och Color
, var och en med distinkta egenskaper och metoder. Shape
definierar formen på ett object, och Color
definierar dess färg.
Shape.h
Color.h
class Shape { public: void setShape(const std::string& value) { shape = value; } std::string getShape() { return shape; } private: std::string shape; };
Nu skapar vi en subklass kallad ColoredShape
som ärver egenskaper och metoder från både klasserna Shape
och 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'; } };
Vertikal arv
Vid djup-arv ärver en class
egenskaper och metoder från sin direkta förälder och dess förfäder, vilket bildar en arvskedja. Till exempel kan class
Vehicle
fungera som grund för arv för Car
, Truck
och andra. I vårt exempel kommer vi att använda Car
för att illustrera konceptet.
Vehicle.h
Car.h
class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };
För att uppnå vertikal arv måste du skapa en hierarki där en class
ärver från en annan, och sedan ärver en efterföljande klass från den första, och så vidare. Vi kan skapa en ElectricCar
som ärver alla egenskaper och funktioner från Car
, som i sin tur ärver från Vehicle
, vilket etablerar en komplex struktur för multipelt arv.
ElectricCar.h
#include "Car.h" class ElectricCar : public Car { public: void charge() { std::cout << "Electric car is charging"; } };
Varför multipelt arv behövs
Multipelt arv ger flexibilitet och återanvändning av kod i situationer där en class
behöver uppvisa beteenden eller egenskaper från mer än en föräldraklass. Här är några scenarier där multipelt arv är fördelaktigt:
Roller i verkliga världen: en flygande fågel kan kombinera egenskaper från både
class
ochFlying
klasserna, vilket representerar båda förmågorna.Bird
-klassen kan även tillämpas på flygplan eller andra flygande objekt.Återanvändning av kod: multipelt arv gör det möjligt för en
Flying
att återanvända funktioner från olika basklasser utan duplicering.Fokuserade gränssnitt: uppmuntrar till att kombinera små, specifika gränssnitt istället för att använda ett stort, generellt.
Dela upp ett komplext objekt i enklare delar och använd multipelt arv för att skapa flexibel och underhållbar programvara.
Tack för dina kommentarer!