Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » es muss ein bedingung geben

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, 14:26 Uhr
ref



klasse-objekt wie zeiger mit initialisierung oder ohne , manchmal geht und manchmal bekommt man eine warnung , und während der ausführung des codes kann ein system-fehler veursachen.
diese code z.b. ist mit zeiger initialisierung auf new dog geschrieben Mammal *pDog = new Dog;

wenn ich nur Mammal *pDog; also ohne =new Dog; schreibe bekomme ich ein warnung
und dann wenn ich trotzdem der code ausführe , system-fehler wird veursacht, nun gut,

ich habe andere code der nur Mammel * ptr; enthalten ohne initialisierung aber läuft ohne warnung ohne fehler warum ? was sind die regeln?

zum vergleich habe ich beide codes geschrieben.

Erste Code:


C++:
// Listing 17.1 Einsatz virtueller Methoden
#include <iostream>

class Mammal
{
public:
     Mammal():itsAge(1) { std::cout << "Mammal-Konstruktor...\n"; }
     ~Mammal() { std::cout << "Mammal-Destruktor...\n"; }
     void Move() const { std::cout << "Mammal geht einen Schritt.\n"; }
     virtual void Speak() const { std::cout << "Mammal spricht!\n"; }

protected:
     int itsAge;
};

class Dog : public Mammal
{
public:
     Dog() { std::cout << "Dog-Konstruktor...\n"; }
     ~Dog() { std::cout << "Dog-Destruktor...\n"; }
     void WagTail() { std::cout << "Schwanzwedeln...\n"; }
     void Speak()const { std::cout << "Wuff!\n"; }
     void Move()const { std::cout << "Dog geht 5 Schritte...\n"; }
};

int main()
{
     Mammal *pDog =new Dog;
     pDog->Move();
     pDog->Speak();
     return 0;
}



Zweite Code ohne initialisierung Nur Mammel *ptr; kein problem:



C++:
// Listing 17.2 Mehrere virtuelle Elementfunktionen der Reihe nach aufrufen
#include <iostream>

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

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


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


class Horse : public Mammal
{
public:
     void Speak()const { std::cout << "Wieher!\n"; }
};

class Pig : public Mammal
{
public:
     void Speak()const { std::cout << "Grunz!\n"; }
};

int main()
{
     Mammal* theArray[5];
     Mammal* ptr;
     int choice, i;
     for ( i = 0; i<5; i++)
     {
         std::cout << "(1)Hund (2)Katze (3)Pferd (4)Schwein: ";
         std::cin >> choice;
         switch (choice)
         {
         case 1:
             ptr = new Dog;
             break;
         case 2:
             ptr = new Cat;
             break;
         case 3:
             ptr = new Horse;
             break;
         case 4:
             ptr = new Pig;
             break;
         default:
             ptr = new Mammal;
             break;
         }
         theArray[i] = ptr;
     }
     for (i=0;i<5;i++)
         theArray[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:33 Uhr
Tommix




Zitat von ref:
wenn ich trotzdem der code ausführe , system-fehler wird veursacht, nun gut,


Systemfehler nix gut.
In dem zweiten Code steht u.a.
Zitat:

C++:
ptr = new Dog;

usw.

d.h. dem Zeiger wird ein Wert zugewiesen, im ersten Beispiel hingegen nicht. Das sollte mehr oder weniger auch der Inhalt der Warnung sein.

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.02.2006, 14:34 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Hä? Kannst du nochmal klar schreiben was du willst?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.02.2006, 14:39 Uhr
ref



Ach so , egal ob nach der deklaration von ptr; später im code , muss ein inisialisierung geben , alles klar danke.
--
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: