halo
ich hab eine code aus meinem buch. beim kompillieren mit visual studio 6.0 gibt es eine warnung.
warning C4541: 'dynamic_cast' fuer polymorphen Typ 'class Mammal' mit /GR- verwendet; unvorhersehbares Verhalten moeglich
bei meinem kollegen gibt es die selbe warnung. (leider auch visual studio 6.0) das programm stürzt dann nach der dritten eingabe ab. :-(
könntet ihr mal schauen, ob das programm bei euch auch abstürzt?(wenn möglich mit einem anderen kompiller) oder noch besser: wisst ihr, woran das liegt?
danke!
// Listing 18.2 - Dynamische Typumwandlung
#include <iostream.h>
class Mammal
{
public:
Mammal():itsAge(1) { cout << "Mammal-Konstruktor...\n"; }
~Mammal() { cout << "Mammal-Destruktor...\n"; }
virtual void Speak() const { cout << "Mammal gib Laut!\n"; }
protected:
int itsAge;
};
class Cat: public Mammal
{
public:
Cat() { cout << "Cat-Konstruktor...\n"; }
~Cat() { cout << "Cat-Destruktor...\n"; }
void Speak()const { cout << "Miau\n"; }
void Purr() const { cout << "rrrrrrrrrrr\n"; }
};
class Dog: public Mammal
{
public:
Dog() { cout << "Dog-Konstruktor...\n"; }
~Dog() { cout << "Dog-Destruktor...\n"; }
void Speak()const { cout << "Wuff!\n"; }
};
int main()
{
const int NumberMammals = 3;
Mammal* Zoo[NumberMammals];
Mammal* pMammal;
int choice,i;
for (i=0; i<NumberMammals; i++)
{
cout << "(1)Hund (2)Katze: ";
cin >> choice;
if (choice == 1)
pMammal = new Dog;
else
pMammal = new Cat;
Zoo[i] = pMammal;
}
cout << "\n";
for (i=0; i<NumberMammals; i++)
{
Zoo[i] ->Speak();
Cat *pRealCat = 0;
pRealCat = dynamic_cast< Cat *> (Zoo[i]);
if (pRealCat)
pRealCat->Purr();
else
cout << "Oh nein, keine Katze!\n";
delete Zoo[i];
cout << "\n";
}
return 0;
}