Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » resultat reihefolge

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
21.02.2006, 13:55 Uhr
ref



es handelt sich um die frage warum die satz "Mammal-Konstruktor..." nicht bevor "(1)Hund (2)Katze (3)Sõugetier: 1"

gezeigt ist?? der aufruf des konstruktors (Mammal* ptr ist in die reihefolge vor std::cout<< "(1)Hund (2)Katze (3)Sõugetier: ";

so sieht das resultat aus:

(1)Hund (2)Katze (3)Sõugetier: 1
Mammal-Konstruktor...
Dog-Konstruktor...
(1)Hund (2)Katze (3)Sõugetier: 2
Mammal-Konstruktor...
Cat-Konstruktor...
(1)Hund (2)Katze (3)Sõugetier: 3
Mammal-Konstruktor...
Wuff!
Mammal-Kopierkonstruktor...
Dog-Kopierkonstruktor...
Miau!
Mammal-Kopierkonstruktor...
Cat-Kopierkonstruktor...
Mammal gib Laut!
Mammal-Kopierkonstruktor...
Wuff!
Miau!
Mammal gib Laut!


und hier ist der code :

C++:
// Listing 17.4 Virtueller Kopierkonstruktor

#include <iostream>



class Mammal

{

public:

     Mammal():itsAge(1) { std::cout << "Mammal-Konstruktor...\n"; }

     virtual ~Mammal() { std::cout << "Mammal-Destruktor...\n"; }

     Mammal (const Mammal & rhs);

     virtual void Speak() const { std::cout << "Mammal gib Laut!\n"; }

     virtual Mammal* Clone() { return new Mammal(*this); }

     int GetAge()const { return itsAge; }



protected:

     int itsAge;

};



Mammal::Mammal (const Mammal & rhs):itsAge(rhs.GetAge())

{

     std::cout << "Mammal-Kopierkonstruktor...\n";

}



class Dog : public Mammal

{

public:

     Dog() { std::cout << "Dog-Konstruktor...\n"; }

     virtual ~Dog() { std::cout << "Dog-Destruktor...\n"; }

     Dog (const Dog & rhs);

     void Speak()const { std::cout << "Wuff!\n"; }

     virtual Mammal* Clone() { return new Dog(*this); }

};



Dog::Dog(const Dog & rhs):

Mammal(rhs)

{

     std::cout << "Dog-Kopierkonstruktor...\n";

}



class Cat : public Mammal

{

public:

     Cat() { std::cout << "Cat-Konstruktor...\n"; }

     virtual ~Cat() { std::cout << "Cat-Destruktor...\n"; }

     Cat (const Cat &);

     void Speak()const { std::cout << "Miau!\n"; }

     virtual Mammal* Clone() { return new Cat(*this); }

};



Cat::Cat(const Cat & rhs):

Mammal(rhs)

{

     std::cout << "Cat-Kopierkonstruktor...\n";

}



enum ANIMALS { MAMMAL, DOG, CAT};

const int NumAnimalTypes = 3;

int main()

{
    
     Mammal *theArray[NumAnimalTypes];

     Mammal* ptr;

     int choice,i;

     for (i = 0; i<NumAnimalTypes; i++)

     {

         std::cout << "(1)Hund (2)Katze (3)Säugetier: ";

         std::cin >> choice;

         switch (choice)

         {

         case DOG:

             ptr = new Dog;

             break;

         case CAT:

             ptr = new Cat;

             break;

         default:

             ptr = new Mammal;

             break;

         }

         theArray[i] = ptr;

     }

     Mammal *OtherArray[NumAnimalTypes];

     for (i=0;i<NumAnimalTypes;i++)

     {

         theArray[i]->Speak();

         OtherArray[i] = theArray[i]->Clone();

     }

     for (i=0;i<NumAnimalTypes;i++)

         OtherArray[i]->Speak();

     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
21.02.2006, 14:05 Uhr
ao

(Operator)



Zitat von ref:
der aufruf des konstruktors (Mammal* ptr ist in die reihefolge vor std::cout<< "(1)Hund (2)Katze (3)Sõugetier: ";

Nein, ist er nicht. Ein Konstruktor wird aufgerufen, wenn das zugehörige Objekt instanziert wird.

C++:
Mammal * ptr;


Das hier instanzierte Objekt ist ein Zeiger, der nicht konstruiert wird.

Erst hier:

C++:
    case DOG:
        ptr = new Dog;


werden die Konstruktoren von Dog und seinen Basisklassen gerufen.

ao
 
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: