Leeren Konstruktor aufrufen bei Vererbung aufrufen
-
Folgendes Beispiel (siehe Kommentare):
#include <iostream> using namespace std; class Mammal { public: Mammal(); ~Mammal(); inline virtual void Speak() const {cout << "Mammal spricht\n";} private: int m_Age; }; Mammal::Mammal() :m_Age(12) { cout << "Mammal Konstruktor\n"; } Mammal::~Mammal() { cout << "Mammal Destruktor\n"; } class Cat : public Mammal { public: Cat(); ~Cat(); inline void Speak() const {cout << "Miau\n";} inline void Purr() const {cout << "rrrrrr\n";} private: }; Cat::Cat() :Mammal() // HIER ruf ich Mammal() auf. Wenn ich es aber weg lass gehts trotzdem? //Ich schätz mal dann macht das der Compiler einfach automatisch für mich? Oder gibts da nen Unterschied? { cout << "Cat Konstruktor\n"; } Cat::~Cat() { cout << "Cat Destruktor\n"; } int main() { return 0; }MfG
Stromberg
-
Es macht nur dann einen Unterschied, wenn die betreffende Basisklasse oder der Member ein POD ist, diese werden nicht initialisiert, wenn sie nicht explizit in der Initialisierungsliste auftauchen. Für nicht-POD Klassen (und Arrays aus solchen Klassen) - wie hier - macht es keinen Unterschied, ist also eine reine Stilfrage.
-
Was sind POD Klassen? Hab ich noch nie gehört? Oder meinst du jetzt einfach wenn z.B. der Konstruktor von Mammal 2 Argumente hätte, das die dann natürlich initialisiert werden müssen? Weil das ist mir schon klar, dann braucht ja auch der Cat Konstruktor zwei zusaätzlich Argumente.....?
Aber POD hab ich noch nie gehört :(, kans mir jemand erklären?MfG
Stromberg
-