====== Ruf einer überladenen Methode aus der Basisklasse ======
===== Hinweis =====
Der folgende Code kann so nicht kompiliert werden, sondern liefert mit dem GCC-Compiler diese Fehlermeldung:
withoutusing.cpp: In function ‘int main()’:
withoutusing.cpp:50: error: no matching function for call to ‘Hund::GibNamenAus()’
withoutusing.cpp:34: note: candidates are: void Hund::GibNamenAus(const char*)
===== Codebeispiel =====
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
class Tier
{
public:
char Name[64];
int Fellfarbe;
int KrallenLaenge;
int AnzahlBeine;
inline void GibNamenAus( void ) { printf( "Ich heiße %s\n", Name ); }
Tier( char const * name, int fellfarbe, int krallenLaenge, int beine )
: Fellfarbe( fellfarbe )
, KrallenLaenge( krallenLaenge )
, AnzahlBeine( beine )
{
int laenge = strlen( name );
if( laenge > 63 ) laenge = 63;
memcpy( Name, name, laenge );
Name[ laenge ] = '\0';
}
};
class Hund : public Tier
{
public:
int GefangeneKatzen;
inline void GibLaut( void ) { printf( "Wau!\n" ); }
inline void GibNamenAus( char const * familyName )
{
printf( "Ich heiße %s %s\n", Name, familyName );
}
Hund( char const * name, int fellFarbe, int krallenLaenge, int gefangeneKatzen )
: Tier( name, fellFarbe, krallenLaenge, 4 /* <- Beine */ ) // Basiskonstruktor für die Klasse Tier
, GefangeneKatzen( gefangeneKatzen )
{}
};
int main( void )
{
Hund harry( "Harry", 0x000000 /* Farbe */, 2 /* Krallenlaenge */, 4 /* gefangene Katzen */ );
harry.GibNamenAus();
// harry.Tier::GibNamenAus(); // <- dies würde funktionieren
return EXIT_SUCCESS;
}