C++ Academy · Lektion

Nedarvning kontra komposition – afvejninger

Sammenlign nedarvning og komposition, og vælg det rigtige værktøj til designet

Lektion 4 af 414 trin

Nedarvning kontra komposition – afvejninger er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.

To måder at genbruge kode på

Du kan genbruge kode ved at nedarve fra en anden klasse eller ved at sammensætte den som et medlem. Begge dele har deres anvendelse.

Nedarvning: "er-en"

Brug nedarvning, når den afledte klasse reelt er en særlig slags af basisklassen.

class Vehicle {};
class Car : public Vehicle {};       // a Car IS a Vehicle
class SportsCar : public Car {};

Sammensætning: "har-en"

Brug sammensætning, når relationen er "har-en" eller "bruger-en".

class Engine {};
class Car {
    Engine engine_;                  // a Car HAS an Engine
};

Afvejning af kobling

Nedarvning skaber tæt kobling — afledte klasser afhænger af basisklassens interne detaljer. Sammensætning holder moduler uafhængige og gør dem lettere at ændre.

Fleksibilitet

Sammensætning gør det muligt at ændre funktionalitet ved kørsel — du kan udskifte det sammensatte objekt. Nedarvning fastlåser funktionaliteten ved kompilering.

class Logger {
    std::unique_ptr<LogSink> sink_;   // can swap implementations
public:
    void setSink(std::unique_ptr<LogSink> s) { sink_ = std::move(s); }
};

Afprøvning

Sammensatte objekter kan erstattes med testdubletter ved afprøvning. Basisklasser, der nedarves fra, er sværere at erstatte med testdubletter uden virtuelle funktioner eller skabeloner.

Problemet med den skrøbelige basisklasse

Ændringer i en basisklasse kan ødelægge mange afledte klasser. Sammensætning begrænser ændringen til den klasse, der sammensætter objekterne.

Vælg nedarvning, når

Nedarvning passer, når:

  • Der findes en tydelig relation af typen "er-en"
  • Der er brug for polymorfi via en basisklassegrænseflade
  • Basisklassen er udtrykkeligt designet til nedarvning

Vælg sammensætning, når

Sammensætning passer, når:

  • Du ønsker fleksibilitet til at udskifte implementeringer
  • Relationen er "har-en" eller "bruger-en"
  • Du ønsker løs kobling og lettere afprøvning

Strategimønstret

Kombinér sammensætning med polymorfi: Gem en basisklassepointer til et strategiobjekt, som værtsklassen sammensætter.

class Sorter {
    std::unique_ptr<SortStrategy> strategy_;
public:
    void sort(std::vector<int>& v) { strategy_->execute(v); }
};

Miksiner og politikklasser

Til tilpasning ved kompilering kan du bruge politikklasser med skabeloner — sammensætning på typeniveau. Det er kraftfuldt og medfører ingen ekstra omkostninger ved kørsel.

Grænseflade + sammensætning

Et almindeligt moderne mønster: Definér en grænseflade (abstrakt basisklasse), og sammensæt konkrete klasser, der implementerer den. Brug nedarvning til grænsefladen og sammensætning til implementeringen.

Hurtigt tjek

Hvilken tilgang giver generelt større fleksibilitet og løsere kobling?

Opsummering

Nedarvning modellerer "er-en", mens sammensætning modellerer "har-en". Sammensætning er mere fleksibel og giver løsere kobling — foretræk den til genbrug af kode. Brug nedarvning til polymorfi via en grænseflade, ofte kombineret med sammensatte implementeringer.

Gratis at komme i gang

Lær C++ med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Nedarvning kontra komposition – afvejninger” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Nedarvning kontra komposition – afvejninger”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Nedarvning kontra komposition – afvejninger”?

Sammenlign nedarvning og komposition, og vælg det rigtige værktøj til designet Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C++ Academy?

Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Nedarvning kontra komposition – afvejninger”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C++ Academy-lektion?

Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Enkelt og multipelt nedarv
  2. Virtuelle funktioner og vtable
  3. Abstrakte klasser og rene virtuelle metoder
  4. Nedarvning kontra komposition – afvejninger
← Tilbage til C++ Academy