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) |