Seite 6 von 7

C++ Tutorial - virtuelle Methoden

Verfasst: Mo Aug 02, 2021 12:43 pm
von Xeon
Hallo zusammen

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;
}
Nur mal erwähnt: Bei der class AmselMutant fehlt ein Semikolon am Ende.

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

Re: C++ Tutorial - virtuelle Methoden

Verfasst: Mi Aug 04, 2021 6:51 am
von Xin
Hallo Xeon,

Sorry für die lange Antwortszeit, bin noch in einer Mischung aus Urlaub und Tauchkursen.
Das Semikolon habe ich korrigiert. Danke dafür.
Xeon hat geschrieben:
Mo Aug 02, 2021 12:43 pm
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 ?
Da stimmt was im Tutorial nicht… :-/

Das da zweimal Piep mutiertes Piepen rauskommt it’s schon richtig, die Erklärung da drunter ergibt auch keinen Sinn mehr, schließlich ist GibLaut() offensichtlich überschrieben worden.

Ich glaube, da waren mal zwei ähnliche Funktionen, die zusammengelegt wurden, um den Quelltext zu vereinfachen. Das ist wohl schief gegangen an der Änderung der Stelle.

Das gucke ich mir später am Laptop an. Das mit iPad ist nicht so dolle ^^
Melde mich dazu am Wochenende nochmal. Heute volles Tauchprogramm.

Re: C++ Tutorial - virtuelle Methoden

Verfasst: Mi Aug 11, 2021 12:11 pm
von Xeon
Hallo Xin
Xin hat geschrieben:
Mi Aug 04, 2021 6:51 am
Das gucke ich mir später am Laptop an. Das mit iPad ist nicht so dolle ^^
Melde mich dazu am Wochenende nochmal. Heute volles Tauchprogramm.
Wegen mir musst Du das nicht extra machen. Die Frage ist relevant: Möchtest du das in deinem neuen C++ Tutorial übernehmen?


Liebe Grüße
Von Xeon

C++ Tutorial - Unions in C

Verfasst: Mo Aug 30, 2021 1:36 pm
von Xeon
Hallo zusammen

Nach zwei Wochen Pause geht es jetzt weiter.

Hier der Link:

https://www.proggen.org/doku.php?id=c:type:union

Es gehört zwar nicht zum C++ Tutorial aber hängt zusammen.

Code: Alles auswählen

union DoubleConverter
{
  double        DoubleValue;
  unsigned int  IntArray[2];
  char          CharArray[10];
};

Code: Alles auswählen

int main( void )
{
  DoubleConverter dc;
 
  dc.DoubleValue = 123.0;
 
  printf( "Hexadezimaldarstellung: %x | %x\n", dc.IntArray[0], dc.IntArray[1] );
};
Bei dieser Zeile

Code: Alles auswählen

DoubleConverter dc;
würde ich davor union setzen, damit der Code übersetzt werden kann.


Liebe Grüße
Von Xeon

Re: C++ Tutorial - Unions in C

Verfasst: Mo Aug 30, 2021 1:51 pm
von Xin
Xeon hat geschrieben:
Mo Aug 30, 2021 1:36 pm
https://www.proggen.org/doku.php?id=c:type:union

Bei dieser Zeile

Code: Alles auswählen

DoubleConverter dc;
würde ich davor union setzen, damit der Code übersetzt werden kann.
Da kommt C++ bei mir wieder durch. :-|

Behoben. Danke!

C++ Tutorial - wieder Union

Verfasst: Mo Aug 30, 2021 2:23 pm
von Xeon
Habe da gerade wieder ein Fehler entdeckt.

Hier der Link:
https://www.proggen.org/doku.php?id=cpp ... einterpret

Da fehlt auch das Schlüsselwort union:

Code: Alles auswählen

int main(int argc, char **argv)
{
  union IpConverter
  {
	  unsigned char byteArray[4];
	  int           token;
  };
 
  IpConverter ip;
  ip.token = 16885952;
 
  printf( "Token: %d\n", ip.token );
  printf( "IpAdress: %d.%d.%d.%d\n", ip.byteArray[0], ip.byteArray[1]
                                   , ip.byteArray[2], ip.byteArray[3] ); 
 
  return 0;
}
Und zwar bei dieser Zeile:

Code: Alles auswählen

IpConverter ip;

Re: C++ Tutorial - wieder Union

Verfasst: Mo Aug 30, 2021 2:29 pm
von Xin
Nein, das ist C++, hier muss vor dem Datentyp nicht mehr der "Typtyp" stehen und das ist auch sinnvoll, wenn man den "Typtyp" ändert.

Re: C++ Tutorial - wieder Union

Verfasst: Mo Aug 30, 2021 2:31 pm
von Xeon
Xin hat geschrieben:
Mo Aug 30, 2021 2:29 pm
Nein, das ist C++, hier muss vor dem Datentyp nicht mehr der "Typtyp" stehen und das ist auch sinnvoll, wenn man den "Typtyp" ändert.
Oh, du hast recht Xin, ich habe das gerade aus versehen mit einem C Compiler übersetzt.

Re: C++ Tutorial - wieder Union

Verfasst: Mo Aug 30, 2021 2:47 pm
von Xin
Xeon hat geschrieben:
Mo Aug 30, 2021 2:31 pm
Oh, du hast recht Xin, ich habe das gerade aus versehen mit einem C Compiler übersetzt.
Yuhuu. :-)

Nach etlichen Fehlern habe ich mal keinen gemacht. :-D

C++ Tutorial - fertig!

Verfasst: Do Sep 02, 2021 3:59 pm
von Xeon
Hallo Xin

Bin fertig mit dem C++ Tutorial! Es war sehr spannend, ich habe viel gelernt. Vielen Dank, dass du es kostenlos anbietest. Auch vielen Dank für die Hilfe im Forum.

Manche Dinge sind zu kurz erklärt z.B. die Meta-Programmierung, aber das macht nichts für den Anfang ist es gut denke ich.


Liebe Grüße
Von Xeon