005
13.02.2006, 18:49 Uhr
ref
|
Alles Klar, danke euch
Und hier ist ein ähnliche beispiel der die sache ganz klar macht dass, beide konstruktoren bei solche klassen aufgerufen werden (also von bassis klasse & abgeleitete klasse) auch am ende beide klassen destruktoren aufgerufen werden.
C++: |
// Listing 16.3 Aufgerufene Konstruktoren und Destruktoren #include <iostream>
enum BREED { YORKIE, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB };
class Mammal { public: // Konstruktoren Mammal(); ~Mammal();
// Zugriffsfunktionen int GetAge() const { return itsAge; } void SetAge(int age) { itsAge = age; } int GetWeight() const { return itsWeight; } void SetWeight(int weight) { itsWeight = weight; }
// Andere Methoden void Speak() const { std::cout << "Mammal gib Laut!\n"; } void Sleep() const { std::cout << "Psst. Ich schlafe.\n"; }
protected: int itsAge; int itsWeight; };
class Dog : public Mammal { public: // Konstruktoren Dog(); ~Dog();
// Zugriffsfunktionen BREED GetBreed() const { return itsBreed; } void SetBreed(BREED breed) { itsBreed = breed; }
// Andere Methoden void WagTail() { std::cout << "Schwanzwedeln...\n"; } void BegForFood() { std::cout << "Um Futter betteln...\n"; }
private: BREED itsBreed; };
Mammal::Mammal(): itsAge(1), itsWeight(5) { std::cout << "Mammal-Konstruktor...\n"; }
Mammal::~Mammal() { std::cout << "Mammal-Destruktor...\n"; }
Dog::Dog(): itsBreed(YORKIE) { std::cout << "Dog-Konstruktor...\n"; }
Dog::~Dog() { std::cout << "Dog-Destruktor...\n"; }
int main() { Dog fido; // Einen Hund erzeugen fido.Speak(); fido.WagTail(); std::cout << "Fido ist " << fido.GetAge() << " Jahre alt.\n"; return 0; }
|
Das Resultat
Mammal-Konstruktor... Dog-Konstruktor... Mammal gib Laut! Schwanzwedeln... Fido ist 1 Jahre alt. Dog-Destruktor... Mammal-Destruktor... -- Man kann ein Problem nicht mit der gleichen Denkweise lösen, mit der es erschaffen wurde. (Albert Einstein) |