Habe wieder ein Problem, hier der Link:
https://www.proggen.org/doku.php?id=cpp:oop:virtual
Hier der Code:
Code: Alles auswählen
class Tier
{
public:
char Name[64];
int Fellfarbe;
int KrallenLaenge;
int AnzahlBeine;
virtual void GibLaut() { printf( "<undefiniertes Geräuch>\n" ); };
virtual int JageFutter( ) { return 0;/* nix gefangen */ };
virtual char const * FutterArt() { return "Luft und Liebe"; };
};
class Hund : public Tier
{
public:
int GefangeneKatzen;
Hund() : GefangeneKatzen( 0 ) {}
virtual void GibLaut() { printf( "Wuff\n" ); }
virtual int JageFutter() { return ++GefangeneKatzen; }
virtual char const * FutterArt() { return "Katzen"; }
};
class Katze : public Tier
{
public:
int GefangeneVoegel;
Katze() : GefangeneVoegel( 0 ) {}
virtual void GibLaut() { printf( "Miau\n" ); }
virtual int JageFutter() { return ++GefangeneVoegel; }
virtual char const * FutterArt() { return "Vögel"; }
};
class Amsel : public Tier
{
public:
int GefangeneInsekten;
Amsel() : GefangeneInsekten( 0 ) {}
void GibLaut() { printf( "Piep\n" ); }
int JageFutter() { return ++GefangeneInsekten; }
char const * FutterArt() { return "Insekten"; }
};
void LautUndZweimalJagen( Tier * tier )
{
tier->GibLaut();
printf( "Tier fängt Nahrung: bisher %d %s gefangen\n", tier->JageFutter(), tier->FutterArt() );
printf( "Tier fängt Nahrung: bisher %d %s gefangen\n", tier->JageFutter(), tier->FutterArt() );
}
class AmselMutant : public Amsel
{
public:
void GibLaut() { printf( "mutiertes Piep\n" ); }
}
int main( void )
{
AmselMutant * amsel = new AmselMutant;
Tier * tier = amsel;
amsel->GibLaut(); // Gibt 'mutiertes Piep' aus
tier->GibLaut(); // Gibt 'Piep' aus
delete amsel;
}
Ich habe folgendes Problem: Bei der main Funktion wird zweimal mutiertes piepen ausgegeben, dabei sollte einmal normales piepen ausgegeben werden. Ist da ein Fehler in der main Funktion oder in der class AmselMutant ?
Liebe Grüße
Von Xeon