Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » aufrufe wie Mammal(age) ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.02.2006, 18:12 Uhr
Spacelord
Hoffnungsloser Fall


Hi,
in dem Beispiel gibt es auch mehrere Konstruktoren.Nur dass du diese nicht selber deklarierst.Die werden automatisch vom Compiler angelegt.
Der Aufruf von Mammal(age) bewirkt nur dass für das anonyme Mammal Subobjekt direkt der Konstruktor aufgerufen wird der das Alter setzt(wobei das ja auch nur an Animal weitergeleitet wird).

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.02.2006, 19:13 Uhr
ref



Hier ist ein kleine beispiel OHNE Mammal() in Cat() { std::cout << "Cat-Konstruktor...\n"; }
wenn ich Mammal() hinfüge wie Cat(): Mammal() { std::cout << "Cat-Konstruktor...\n"; }

ich bekomme das selbe ergebnis


C++:
// Listing 18.1 - Virtuelle Methoden
#include <iostream>

class Mammal
{
public:
     Mammal():itsAge(1) { std::cout << "Mammal-Konstruktor...\n"; }
     virtual ~Mammal() { std::cout << "Mammal-Destruktor...\n"; }
     virtual void Speak() const { std::cout << "Mammal gib Laut!\n"; }
protected:
     int itsAge;
};

class Cat: public Mammal
{
public:
     Cat() { std::cout << "Cat-Konstruktor...\n"; }
     ~Cat() { std::cout << "Cat-Destruktor...\n"; }
     void Speak()const { std::cout << "Miau!\n"; }
};

int main()
{
     Mammal *pCat = new Cat;
     pCat->Speak();
     return 0;
}




Ergebnis sind Gleich mit Mammal() oder ohne :

Mammal-Konstruktor...
Cat-Konstruktor...
Miau!


im erste Beispiel kann Ich nicht Mammal(age) in Class Dog Oder Animal(age) in
Class Fish Weg Nehmen .
sonst ein Fehler: keine geeignte standard konstruktor verfügbar
--
Man kann ein Problem nicht mit der gleichen Denkweise lösen, mit der es erschaffen wurde. (Albert Einstein)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.03.2006, 13:35 Uhr
~Haui
Gast


Der Aufruf von Mammal(age) in Dog initialisiert itsAge in Mammal. Dann braucht man z.B. nicht explizit eine Funktion SetAge( int age) im Dog Konstrutor. Der Dog Konstruktor bekommt age und ruft den Konstruktor von Mammal auf, der wiederum den von Animal aufruft. Dann landet dein Initialisierungwert in Animal::itsAge den du mit new Dog( age) übergeben hast.





Zitat von ref:
Hier ist ein kleine beispiel OHNE Mammal() in Cat() { std::cout << "Cat-Konstruktor...\n"; }
wenn ich Mammal() hinfüge wie Cat(): Mammal() { std::cout << "Cat-Konstruktor...\n"; }

ich bekomme das selbe ergebnis


C++:
// Listing 18.1 - Virtuelle Methoden
#include <iostream>

class Mammal
{
public:
     Mammal():itsAge(1) { std::cout << "Mammal-Konstruktor...\n"; }
     virtual ~Mammal() { std::cout << "Mammal-Destruktor...\n"; }
     virtual void Speak() const { std::cout << "Mammal gib Laut!\n"; }
protected:
     int itsAge;
};

class Cat: public Mammal
{
public:
     Cat() { std::cout << "Cat-Konstruktor...\n"; }
     ~Cat() { std::cout << "Cat-Destruktor...\n"; }
     void Speak()const { std::cout << "Miau!\n"; }
};

int main()
{
     Mammal *pCat = new Cat;
     pCat->Speak();
     return 0;
}




Ergebnis sind Gleich mit Mammal() oder ohne :

Mammal-Konstruktor...
Cat-Konstruktor...
Miau!


im erste Beispiel kann Ich nicht Mammal(age) in Class Dog Oder Animal(age) in
Class Fish Weg Nehmen .
sonst ein Fehler: keine geeignte standard konstruktor verfügbar
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: