000
14.02.2006, 11:44 Uhr
ref
|
Wozu braucht man in diesem code Mammal() oder Mammal(age) in den markerten zeilen zu schreiben? die sind schon am anfang des codes deklariert, was dient die wiederholung?
C++: |
// Listing 16.4 Konstruktoren in abgeleiteten Klassen überladen #include <iostream>
enum BREED { YORKIE, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB };
class Mammal { public: // Konstruktoren Mammal(); Mammal(int age); ~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(int age); Dog(int age, int weight); Dog(int age, BREED breed); Dog(int age, int weight, BREED breed); ~Dog();
// Zugriffsmethoden 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(int age): itsAge(age), itsWeight(5) { std::cout << "Mammal(int)-Konstruktor...\n"; }
Mammal::~Mammal() { std::cout << "Mammal-Destruktor...\n"; }
// ????????? ... zwei zeilen nach unten befindet sich Mammal() Dog::Dog(): Mammal(), itsBreed(YORKIE) { std::cout << "Dog-Konstruktor...\n"; } // ????????? UND AUCH HIER Mammal(age) .... WOZU ??????? Dog::Dog(int age): Mammal(age), itsBreed(YORKIE) { std::cout << "Dog(int)-Konstruktor...\n"; }
Dog::Dog(int age, int weight): Mammal(age), itsBreed(YORKIE) { itsWeight = weight; std::cout << "Dog(int, int)-Konstruktor...\n"; }
Dog::Dog(int age, int weight, BREED breed): Mammal(age), itsBreed(breed) { itsWeight = weight; std::cout << "Dog(int, int, BREED)-Konstruktor...\n"; }
Dog::Dog(int age, BREED breed): Mammal(age), itsBreed(breed) { std::cout << "Dog(int, BREED)-Konstruktor...\n"; }
Dog::~Dog() { std::cout << "Dog-Destruktor...\n"; }
int main() { Dog fido; Dog rover(5); Dog buster(6,8); Dog yorkie (3,YORKIE); Dog dobbie (4,20,DOBERMAN); fido.Speak(); rover.WagTail(); std::cout << "Yorkie ist " << yorkie.GetAge() << " Jahre alt.\n"; std::cout << "Dobbie wiegt " << dobbie.GetWeight() << " Pfund.\n"; return 0; }
|
Das Resultat :
Mammal-Konstruktor... Dog-Konstruktor... Mammal(int)-Konstruktor... Dog(int)-Konstruktor... Mammal(int)-Konstruktor... Dog(int, int)-Konstruktor... Mammal(int)-Konstruktor... Dog(int, BREED)-Konstruktor... Mammal(int)-Konstruktor... Dog(int, int, BREED)-Konstruktor... Mammal gib Laut! Schwanzwedeln... Yorkie ist 3 Jahre alt. Dobbie wiegt 20 Pfund. Dog-Destruktor... Mammal-Destruktor... Dog-Destruktor... Mammal-Destruktor... Dog-Destruktor... Mammal-Destruktor... Dog-Destruktor... Mammal-Destruktor... Dog-Destruktor... Mammal-Destruktor... -- Man kann ein Problem nicht mit der gleichen Denkweise lösen, mit der es erschaffen wurde. (Albert Einstein) |