Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Multippel Arv | Oversikt over Arv
C++ OOP
course content

Kursinnhold

C++ OOP

C++ OOP

1. Grunnleggende om OOP i C++
2. Konstruktører og Destruktører
3. Oversikt Over Innkapsling
4. Oversikt over Arv
5. Oversikt over Polymorfisme

book
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

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; };

La oss nå lage en subklasse kalt ColoredShape som arver egenskaper og metoder fra både klassene Shape og 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

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

Vehicle.h

Car.h

Car.h

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

ElectricCar.h

copy
123456
#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 og Bird-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.

Note
Merk

Del opp et komplekst objekt i enklere deler og bruk multippel arv for å lage fleksibel og vedlikeholdbar programvare.

question mark

Hvilket av følgende utsagn om horisontal arv er korrekt?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 3

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

course content

Kursinnhold

C++ OOP

C++ OOP

1. Grunnleggende om OOP i C++
2. Konstruktører og Destruktører
3. Oversikt Over Innkapsling
4. Oversikt over Arv
5. Oversikt over Polymorfisme

book
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

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; };

La oss nå lage en subklasse kalt ColoredShape som arver egenskaper og metoder fra både klassene Shape og 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

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

Vehicle.h

Car.h

Car.h

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

ElectricCar.h

copy
123456
#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 og Bird-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.

Note
Merk

Del opp et komplekst objekt i enklere deler og bruk multippel arv for å lage fleksibel og vedlikeholdbar programvare.

question mark

Hvilket av følgende utsagn om horisontal arv er korrekt?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 3
some-alt