Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » konstruktor frage

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
12.02.2006, 22:48 Uhr
ref



Dog fido; // diese befindet sich in Main , die Frage ist : es wird hier der Basisklasse-konstruktor gerufen
Nicht der konstruktor von der selbe klasse(Dog-klasse konstruktor) warum?
danke in voraus


C++:
// Listing 16.2 Ein abgeleitetes Objekt verwenden

#include <iostream>



enum BREED { YORKIE, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB };



class Mammal

{

public:

     // Konstruktoren

     Mammal():itsAge(2), itsWeight(5){}

     ~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 gibt Laut!\n"; }

     void Sleep()const { std::cout << "Psst. Ich schlafe.\n"; }





protected:

     int itsAge;

     int itsWeight;

};



class Dog : public Mammal

{

public:

     // Konstruktoren

     Dog():itsBreed(YORKIE){}

     ~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;

};



int main()

{

     Dog fido;

     fido.Speak();

     fido.WagTail();

     std::cout << "Fido ist " << fido.GetAge() << " Jahre alt.\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
13.02.2006, 09:19 Uhr
ao

(Operator)



C++:
Dog fido;

An dieser Stelle muss zuerst in den Konstruktor von Dog gesprungen werden.

C++:
Dog():itsBreed(YORKIE){}

Der muss dann zuallererst nach Mammal () verzweigen, dann sein eigenes Member itsBreed initialisieren und dann den leeren Codeblock ausführen.

Wenn das nicht so ist, dann ist der Code, den du gepostet hast, nicht der, der ausgeführt wird.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.02.2006, 09:32 Uhr
ref



ich bin auch der meinung dass es sollte mit der konstrutor von Mammal gehandlt werden
aber das resultat sieht so aus:

Mammal gibt Laut!
Schwanzwedeln...
Fido ist 2 Jahre alt.



die 2 hier zeigt das wert von itsAge , woher hat der kompiller dieses wert bekommen wenn er nicht zu der konstruktor von Mammal gegangen hatte???, warum dorthin gegangen und
nicht zu klasse dog konstruktor wo er hingehen soll?
--
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
13.02.2006, 09:40 Uhr
ref



ich bin auch der meinung dass es sollte mit der konstrutor von Dog gehandlt werden
aber das resultat sieht so aus:

Mammal gibt Laut!
Schwanzwedeln...
Fido ist 2 Jahre alt.



die 2 hier zeigt das wert von itsAge , woher hat der kompiller dieses wert bekommen wenn er nicht zu der konstruktor von Mammal gegangen hatte???, warum dorthin gegangen und
nicht zu klasse dog konstruktor wo er hingehen soll?
--
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
004
13.02.2006, 10:41 Uhr
(un)wissender
Niveauwart


Ist schon alles richtig so. Lies ein Buch zu C++. Oder höre ao zu.
Dog besteht aus einem Mammalteil (der durch den Mammalkonstuktor erzeugt wird) und einen Dogteil.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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)
 
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: