Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Multipelt arv | Översikt av Arv
C++ OOP
course content

Kursinnehåll

C++ OOP

C++ OOP

1. Grunderna i OOP i C++
2. Konstruktorer och Destruktorer
3. Översikt Av Inkapsling
4. Översikt av Arv
5. Översikt av Polymorfism

book
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

Shape.h

Color.h

Color.h

copy
1234567
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

ColoredShape.h

copy
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

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

Vehicle.h

Car.h

Car.h

copy
12345
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

ElectricCar.h

copy
123456
#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 och Flying 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.

Note
Notera

Dela upp ett komplext objekt i enklare delar och använd multipelt arv för att skapa flexibel och underhållbar programvara.

question mark

Vilket av följande påståenden om horisontellt arv är korrekt?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 3

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

course content

Kursinnehåll

C++ OOP

C++ OOP

1. Grunderna i OOP i C++
2. Konstruktorer och Destruktorer
3. Översikt Av Inkapsling
4. Översikt av Arv
5. Översikt av Polymorfism

book
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

Shape.h

Color.h

Color.h

copy
1234567
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

ColoredShape.h

copy
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

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

Vehicle.h

Car.h

Car.h

copy
12345
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

ElectricCar.h

copy
123456
#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 och Flying 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.

Note
Notera

Dela upp ett komplext objekt i enklare delar och använd multipelt arv för att skapa flexibel och underhållbar programvara.

question mark

Vilket av följande påståenden om horisontellt arv är korrekt?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 3
some-alt