Kursinnhold
C++ OOP
C++ OOP
Multippel Arv
Multippel arv gjør det mulig for en avledet klasse å arve fra flere baseklasser. Dette betyr at en enkelt avledet klasse kan få tilgang til medlemmene (data og funksjoner) til flere baseklasser, og dermed kombinere deres attributter og oppførsel.
Horisontal multippel arv
Ved denne typen multippel arv arver en klasse egenskaper og metoder fra flere superklasser på samme nivå i arvshierarkiet. Tenk på classes
: Shape
og Color
, hver med sine egne egenskaper og metoder. Shape
definerer formen til et object, og Color
definerer fargen.
Shape.h
Color.h
class Shape { public: void setShape(const std::string& value) { shape = value; } std::string getShape() { return shape; } private: std::string shape; };
La oss nå lage en subklasse kalt ColoredShape
som arver egenskaper og metoder fra både klassene Shape
og 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
Ved dybdearv arver en class
egenskaper og metoder fra sin direkte forelder og dens forfedre, og danner en arvkjede. For eksempel kan class
Vehicle
fungere som grunnlag for arv for Car
, Truck
og andre. I vårt eksempel vil vi bruke Car
for å illustrere konseptet.
Vehicle.h
Car.h
class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };
For å oppnå vertikal arv, må du sette opp et hierarki der én class
arver fra en annen, og deretter arver en påfølgende klasse fra den første, og så videre. Vi kan lage en ElectricCar
som arver alle egenskaper og funksjonalitet fra Car
, som igjen arver fra Vehicle
, og dermed etablere en kompleks struktur for multippel arv.
ElectricCar.h
#include "Car.h" class ElectricCar : public Car { public: void charge() { std::cout << "Electric car is charging"; } };
Hvorfor er multippel arv nødvendig
Multippel arv gir fleksibilitet og gjenbruk av kode i situasjoner der en class
må ha egenskaper eller oppførsel fra mer enn én foreldre-class
. Her er noen scenarier hvor multippel arv er fordelaktig:
Virkelige roller: en flyvende fugl kan kombinere egenskaper fra både
Flying
ogBird
-klasser, og representerer begge evner.Flying
-klassen kan også brukes for fly eller andre flyvende objekter.Gjenbruk av kode: multippel arv lar en klasse gjenbruke funksjonalitet fra ulike basisklasser uten duplisering.
Fokuserte grensesnitt: oppmuntrer til å kombinere små, spesifikke grensesnitt i stedet for å bruke ett stort, generelt.
Del opp et komplekst objekt i enklere deler og bruk multippel arv for å lage fleksibel og vedlikeholdbar programvare.
Takk for tilbakemeldingene dine!