15 Stimmen

Wird der Konstruktor und Destruktor einer Basisklasse mit den abgeleiteten aufgerufen?

Ich habe eine Klasse namens MyBase, die einen Konstruktor und Destruktor hat:

class MyBase
{
public:
    MyBase(void);
    ~MyBase(void);
};

und Ich habe eine Klasse namens Banana, die MyBase erweitert, wie folgt:

class Banana:public MyBase
{
public:
    Banana(void);
    ~Banana(void);
};

Wird die Implementierung des neuen Konstruktors und Destruktors in Banana die MyBase überschreiben, oder existieren sie noch und werden vor oder nach dem Banana-Konstruktor / Destruktor aufgerufen?

Danke und entschuldigen Sie, wenn meine Frage albern erscheint.

2voto

LiraNuna Punkte 61060

Sie vermissen die Art der Vererbung:

Ändern Sie

class Banana:MyBase

in:

class Banana: public MyBase

Was

betrifft die Implementierung des neuen Konstruktors und Destruktors in Banana überschreiben die MyBase-Methoden diese, oder existieren sie weiterhin und werden vor oder nach dem Aufruf des Banana-Konstruktors / -Dekonstruktors aufgerufen?

Die Reihenfolge der Vererbung erfolgt von unten nach oben, das bedeutet, dass zuerst MyBase aufgerufen wird, dann Banana. Wenn Sie eine weitere Unterklasse hätten, würde diese zuletzt aufgerufen.

Betrachten Sie dieses Beispiel:

class RottenBanana : public Banana

Die Vererbungskette lautet nun RottenBanana -> Banana -> MyBase

Die Konstruktoren dieser Klasse werden beginnend bei MyBase aufgerufen, dann Banana und dann RottenBanana.

-2voto

Kurt Olsen Punkte 69

Wenn Sie ein EEGModeRGB-Objekt instanziieren (das RGB-LEDs hat) und es sofort löschen, sehen Sie die Farben Blau, Grün, Gelb und Rot, jeweils eine Sekunde lang - in dieser Reihenfolge.

class EEGMode {
public:

   EEGMode()  { setAllPixelsToColor(BLUE); delay(1000); }
   virtual ~EEGMode()  { setAllPixelsToColor(RED); delay(1000); }

};

class EEGModeRGB : public EEGMode {
public:

    EEGModeRGB()  { setAllPixelsToColor(GREEN);  delay(1000); }
    virtual ~EEGModeRGB()  { setAllPixelsToColor(YELLOW); delay(1000); }

};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X