Kurssisisältö
C++ OOP
C++ OOP
Moniperintä
Moniperintä mahdollistaa johdetun luokan perimisen useammasta kantaluokasta. Tämä tarkoittaa, että yhdellä johdetulla luokalla voi olla pääsy usean kantaluokan jäseniin (tietoihin ja funktioihin), jolloin niiden ominaisuudet ja käyttäytymiset yhdistyvät.
Horisontaalinen moniperintä
Tässä moniperinnän muodossa luokka perii ominaisuuksia ja metodeja useilta yläluokilta, jotka ovat samalla tasolla perintähierarkiassa. Tarkastellaan classes
: Shape
ja Color
, joilla kummallakin on omat ominaisuutensa ja metodinsa. Shape
määrittelee olion muodon ja Color
määrittelee sen värin.
Shape.h
Color.h
class Shape { public: void setShape(const std::string& value) { shape = value; } std::string getShape() { return shape; } private: std::string shape; };
Luodaan nyt aliluokka nimeltä ColoredShape
, joka perii ominaisuudet ja metodit sekä Shape
- että Color
-luokista.
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'; } };
Vertikaalinen perintä
Syvässä perinnässä class
perii ominaisuudet ja metodit suoralta vanhemmaltaan sekä tämän esivanhemmilta, muodostaen perintäketjun. Esimerkiksi class
Vehicle
voi toimia pohjana periytymiselle Car
-, Truck
- ja muille luokille. Tässä esimerkissä käytämme Car
-luokkaa havainnollistamaan tätä käsitettä.
Vehicle.h
Car.h
class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };
Saavuttaaksesi vertikaalisen periytymisen, sinun tulee luoda hierarkia, jossa yksi class
perii toiselta, ja seuraava luokka perii ensimmäiseltä, ja niin edelleen. Voimme luoda ElectricCar
-luokan, joka perii kaikki ominaisuudet ja toiminnot Car
-luokalta, joka puolestaan perii Vehicle
-luokalta, muodostaen näin monimutkaisen moniperiytymisen rakenteen.
ElectricCar.h
#include "Car.h" class ElectricCar : public Car { public: void charge() { std::cout << "Electric car is charging"; } };
Miksi moniperintä on tarpeen
Moniperintä tarjoaa joustavuutta ja koodin uudelleenkäyttöä tilanteissa, joissa class
täytyy ilmentää useamman kuin yhden vanhemman class
ominaisuuksia tai käyttäytymistä. Tässä joitakin tilanteita, joissa moniperintä on hyödyllistä:
Reaalimaailman roolit: lentävä lintu voi yhdistää sekä
Flying
- ettäBird
-luokkien ominaisuudet, edustaen molempia kykyjä.Flying
-luokkaa voidaan käyttää myös lentokoneisiin tai muihin lentäviin olioihin.Koodin uudelleenkäyttö: moniperintä mahdollistaa luokan ominaisuuksien uudelleenkäytön eri kantaluokista ilman päällekkäisyyttä.
Tarkennetut rajapinnat: kannustaa yhdistämään pieniä, tarkkoja rajapintoja yhden suuren ja yleisen sijaan.
Jaa monimutkainen olio yksinkertaisempiin osiin ja hyödynnä moniperintää luodaksesi joustavaa ja ylläpidettävää ohjelmistoa.
Kiitos palautteestasi!