C++ Tutorial

Schnelle objektorientierte, kompilierende Programmiersprache.
Xeon
Beiträge: 169
Registriert: So Dez 17, 2017 4:10 pm

C++ Tutorial - virtuelle Methoden

Beitrag von Xeon » Mo Aug 02, 2021 12:43 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: C++ Tutorial - virtuelle Methoden

Beitrag von Xin » Mi Aug 04, 2021 6:51 am

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Xeon
Beiträge: 169
Registriert: So Dez 17, 2017 4:10 pm

Re: C++ Tutorial - virtuelle Methoden

Beitrag von Xeon » Mi Aug 11, 2021 12:11 pm

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

Xeon
Beiträge: 169
Registriert: So Dez 17, 2017 4:10 pm

C++ Tutorial - Unions in C

Beitrag von Xeon » Mo Aug 30, 2021 1:36 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: C++ Tutorial - Unions in C

Beitrag von Xin » Mo Aug 30, 2021 1:51 pm

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!
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Xeon
Beiträge: 169
Registriert: So Dez 17, 2017 4:10 pm

C++ Tutorial - wieder Union

Beitrag von Xeon » Mo Aug 30, 2021 2:23 pm

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;

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: C++ Tutorial - wieder Union

Beitrag von Xin » 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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Xeon
Beiträge: 169
Registriert: So Dez 17, 2017 4:10 pm

Re: C++ Tutorial - wieder Union

Beitrag von Xeon » Mo Aug 30, 2021 2:31 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: C++ Tutorial - wieder Union

Beitrag von Xin » Mo Aug 30, 2021 2:47 pm

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
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Xeon
Beiträge: 169
Registriert: So Dez 17, 2017 4:10 pm

C++ Tutorial - fertig!

Beitrag von Xeon » Do Sep 02, 2021 3:59 pm

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

Antworten