000
26.02.2006, 16:55 Uhr
ref
|
die aufgabe von Mammal(age) (befindet sich in class Dog) ist mir nicht klar ??
sagt diese anweisung den kompiller : nimm ein standard konstruktor mit nur ein einzige variable ?, oder ist für eine andere aufgabe gedacht , die klasse Mammal z.b. hat schon.. einen konstruktor mit 1 variable. diese aufrufe befindet sich auch in Mammal /Horse konstruktoren u.s.w.
als ich letztesmal diese frage gestellt habe , es war andere situation, es gab mehrere konstruktoren in der haupt klasse , und ich hab es verstanden dass, es ist notwendig um die richtige konstruktor von mehrere auszuwählen , aber jetzt gibt es weder bei Animal noch bei Mammal mehrere konstruktoren sondern nur 1 für jede klasse , nur die klasse Dog unterscheidet sich von den anderen mit einem 2 variablen konstruktor.
also was ist die aufgabe von Mammal(age) .. sind solche aufrufe immer notwendig, findet sie nicht automatisch statt ?
hier ist der code:
C++: |
// Listing 18.7
// ADTs von anderen ADTs ableiten
#include <iostream>
enum COLOR { Red, Green, Blue, Yellow, White, Black, Brown } ;
class Animal // Gemeinsame Basisklasse sowohl für Horse als auch Fish
{
public:
Animal(int);
virtual ~Animal() { std::cout << "Animal-Destruktor...\n"; }
virtual int GetAge() const { return itsAge; }
virtual void SetAge(int age) { itsAge = age; }
virtual void Sleep() const = 0;
virtual void Eat() const = 0;
virtual void Reproduce() const = 0;
virtual void Move() const = 0;
virtual void Speak() const = 0;
private:
int itsAge;
};
Animal::Animal(int age):
itsAge(age)
{
std::cout << "Animal-Konstruktor...\n";
}
class Mammal : public Animal
{
public:
Mammal(int age):Animal(age)
{ std::cout << "Mammal-Konstruktor...\n";}
virtual ~Mammal() { std::cout << "Mammal-Destruktor...\n";}
virtual void Reproduce() const
{ std::cout << "Mammal Fortpflanzung...\n"; }
};
class Fish : public Animal
{
public:
Fish(int age):Animal(age)
{ std::cout << "Fish-Konstruktor...\n";}
virtual ~Fish()
{ std::cout << "Fish-Destruktor...\n"; }
virtual void Sleep() const
{ std::cout << "Fisch schlummert...\n"; }
virtual void Eat() const
{ std::cout << "Fisch frisst...\n"; }
virtual void Reproduce() const
{ std::cout << "Fisch legt Eier...\n"; }
virtual void Move() const
{ std::cout << "Fisch schwimmt...\n"; }
virtual void Speak() const { }
};
class Horse : public Mammal
{
public:
Horse(int age, COLOR color ):
Mammal(age), itsColor(color)
{ std::cout << "Horse-Konstruktor...\n"; }
virtual ~Horse()
{ std::cout << "Horse-Destruktor...\n"; }
virtual void Speak()const
{ std::cout << "Wieher!... \n"; }
virtual COLOR GetItsColor() const
{ return itsColor; }
virtual void Sleep() const
{ std::cout << "Pferd schlaeft...\n"; }
virtual void Eat() const
{ std::cout << "Pferd frisst...\n"; }
virtual void Move() const
{ std::cout << "Pferd laeuft...\n";}
protected:
COLOR itsColor;
};
class Dog : public Mammal
{
public:
Dog(int age, COLOR color ):
Mammal(age), itsColor(color)
{ std::cout << "Dog-Konstruktor...\n"; }
virtual ~Dog()
{ std::cout << "Dog-Destruktor...\n"; }
virtual void Speak()const
{ std::cout << "Wuff!... \n"; }
virtual void Sleep() const
{ std::cout << "Hund schlaeft...\n"; }
virtual void Eat() const
{ std::cout << "Hund frisst...\n"; }
virtual void Move() const
{ std::cout << "Hund laeuft...\n"; }
virtual void Reproduce() const
{ std::cout << "Hunde pflanzen sich fort...\n"; }
protected:
COLOR itsColor;
};
int main()
{
Animal *pAnimal=0;
int choice;
bool fQuit = false;
while (1)
{
std::cout << "(1)Hund (2)Pferd (3)Fisch (0)Beenden: ";
std::cin >> choice;
switch (choice)
{
case 1:
pAnimal = new Dog(5,Brown);
break;
case 2:
pAnimal = new Horse(4,Black);
break;
case 3:
pAnimal = new Fish (5);
break;
default:
fQuit = true;
break;
}
if (fQuit)
break;
pAnimal->Speak();
pAnimal->Eat();
pAnimal->Reproduce();
pAnimal->Move();
pAnimal->Sleep();
delete pAnimal;
std::cout << "\n";
}
return 0;
}
|
-- Man kann ein Problem nicht mit der gleichen Denkweise lösen, mit der es erschaffen wurde. (Albert Einstein) |