Direct naar de hoofdinhoud
Module 6 · Les 1 van 213/18 in de cursus~12 min
Modulelessen (1/2)

Overerving in C++

Overerving is een van de belangrijkste pijlers van Object-Oriented Programming (OOP). Hiermee kan een nieuwe klasse (de afgeleide of onderliggende klasse genoemd) leden (attributen en methoden) overnemen van een bestaande klasse (de basis- of bovenliggende klasse genoemd), waardoor hergebruik van code wordt bevorderd.

Basissyntaxis

In C++ wordt overerving gespecificeerd met behulp van de operator : na de afgeleide klassenaam, gevolgd door een toegangsspecificatie (meestal public) en de naam van de basisklasse.

C++
class Shape {
public:
    void setColor(std::string c) {
        color = c;
    }
protected:
    std::string color; // Accessible by derived classes
};

// Rectangle inherits publicly from Shape
class Rectangle : public Shape {
public:
    double getArea() {
        return width * height;
    }
private:
    double width {0.0};
    double height {0.0};
};

Toegangsspecificatie: protected

Samen met public en private introduceert overerving de protected specificatie:

  • private leden van de basisklasse zijn niet rechtstreeks toegankelijk vanuit de afgeleide klasse.
  • protected leden van de basisklasse zijn van buitenaf niet toegankelijk, maar zijn direct toegankelijk binnen afgeleide klassen.

Initialisatie van basisklasse

Constructors worden niet automatisch overgenomen. Bij het instantiëren van een afgeleide klasse wordt eerst de constructor van de basisklasse aangeroepen. Als de basisklasse argumenten vereist, moeten we deze expliciet aanroepen in de ledeninitialisatielijst van de afgeleide constructor.

C++
class Parent {
public:
    Parent(int x) {
        std::cout << "Parent: " << x << std::endl;
    }
};

class Child : public Parent {
public:
    // Explicit call to Parent constructor
    Child(int x, int y) : Parent(x) {
        std::cout << "Child: " << y << std::endl;
    }
};

Probeer het zelf

Oefening#cpp.m6.l1.e1
Pogingen: 0Laden…

Creëer een Dog-klasse die publiekelijk erft van de Animal-klasse. De klasse Dog moet een openbare methode play() bevatten die 'Playing' afdrukt met behulp van std::cout.

Editor laden…
Toon hint

Gebruik de `:`-syntaxis gevolgd door `public Animal` om de basisklasse uit te breiden en schrijf vervolgens de `play()`-methode.

Oplossing beschikbaar na 3 pogingen

Oefening#cpp.m6.l1.e2
Pogingen: 0Laden…

Voltooi de klasse Auto door te erven van Voertuig. Schrijf een constructor voor Auto die std::string b accepteert en deze via de ledeninitialisatielijst doorgeeft aan de Voertuigconstructor.

Editor laden…
Toon hint

Gebruik in de `Car`-constructor de syntaxis `: Vehicle(b)` onmiddellijk na de parameterhaakjes om de initialisatie van het merk te delegeren aan de basisklasse.

Oplossing beschikbaar na 3 pogingen