C++ Tutorial

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8735
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: C++ Tutorial

Beitrag von Xin » Di Apr 06, 2021 3:44 pm

Hmm... das ist ein Teil der objektorientierten Programmierung, kommt also noch.

Tatsächlich ist die virtuelle Funktion eigentlich nicht nötig, um eine Null-Instanz zu erklären, den Part schreibe ich mal um.

Nehmen wir einen String. Eine Referenz braucht einen String. Wenn es jetzt keinen Nullpointer geben darf, könnte eine Null-Instanz des String der leere String sein. Es ist ein gültiges Objekt, man kann alles damit machen, was man mit einem normalen String auch kann, aber er hat halt keinen Inhalt.

Schaumal, ob der geänderte Text für Dich mehr Sinn ergibt.
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: 128
Registriert: So Dez 17, 2017 4:10 pm

C++ Tutorial - Vererbung

Beitrag von Xeon » Do Apr 08, 2021 2:34 pm

Hallo Xin

Erstmal der Link:

https://www.proggen.org/doku.php?id=cpp ... ance:start

Mir sind bei diesen Code Fehler aufgefallen:

Code: Alles auswählen

class Hund
{
public:
  char Name[64];
  int  Fellfarbe;
  int  KrallenLaenge;
  int  GefangeneKatzen;
  int  AnzahlBeine;
 
  inline void GibLaut( void ) { printf( "Wau!\n"; }
  inline void GibNamenAus( void ) { printf( "Ich heiße %s\n", Name );
};
 
class Katze
{
public:
  char  Name[64];
  int   Fellfarbe;
  int   KrallenLaenge;
  int   GefangeneVoegel;
  int   AnzahlBeine;
 
  inline void GibLaut( void ) { printf( "Miau!\n"; }
  inline void GibNamenAus( void ) { printf( "Ich heiße %s\n", Name );
};
 
class Amsel
{
public:
  char Name[64];
  int  Fellfarbe;
  int  KrallenLaenge;
  int  GefangeneInsekten;
  int  AnzahlBeine;
 
  inline void GibLaut( void ) { printf( "Piep!\n"; }
  inline void GibNamenAus( void ) { printf( "Ich heiße %s\n", Name );
};
Bei class Hund fehlt bei der Funktion printf eine runde Klammer am Ende. Bei der Funktion GibNamenAus() fehlt nach der Funktion prinft eine geschweifte Klammer. So geht es auch weiter bei der class Katze und Amsel.

Code: Alles auswählen

class Tier
{
public:
  char Name[64];
  int  Fellfarbe;
  int  KrallenLaenge;
  int  AnzahlBeine;
 
  inline void GibNamenAus( void ) { printf( "Ich heiße %s\n", Name );
};
Bei dieser class fehlt nach printf am Ende ein geschweifte Klammer.

Hier sind die gleichen Fehler am Ende von printf wie beim Code oben:

Code: Alles auswählen

class Hund : public Tier
{
public:
  int  GefangeneKatzen;
 
  inline void GibLaut( void ) { printf( "Wau!\n"; }
};
 
class Katze : public Tier
{
public:
  int   GefangeneVoegel;
 
  inline void GibLaut( void ) { printf( "Miau!\n"; }
};
 
class Amsel : public Tier
{
public:
  int  GefangeneInsekten;
 
  inline void GibLaut( void ) { printf( "Piep!\n"; }
};
Es fehlen bei allen drei class nach printf die abschließende runde Klammer.


Liebe Grüße
Xeon

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

Re: C++ Tutorial

Beitrag von Xin » Do Apr 08, 2021 4:43 pm

Geändert, danke!
Geht nichts über ein zuverlässiges Copy'n'Paste. ;-)

Mit Deinem Account kannst Du solche Fehler auch selbst rausnehmen. Die sind wohl unfraglich.
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.

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

Re: C++ Tutorial

Beitrag von Xin » Fr Apr 09, 2021 4:50 pm

Xin hat geschrieben:
Do Apr 08, 2021 4:43 pm
Mit Deinem Account kannst Du solche Fehler auch selbst rausnehmen. Die sind wohl unfraglich.
Genau so. *Daumen hoch* ;-)
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: 128
Registriert: So Dez 17, 2017 4:10 pm

C++ Tutorial - Methoden von Basisklassen rufen

Beitrag von Xeon » Di Apr 13, 2021 2:23 pm

Hallo zusammen

Hier der Link:
https://www.proggen.org/doku.php?id=cpp ... :overwrite
Achtung: auch wenn hier statische gebundene Methoden überschrieben werden, so besteht ein Unterschied zu statischen Methoden. Statisch gebundene Methoden sind an den Datentyp unverändlich gebunden, erhalten aber eine Instanz des Objektes als this-Zeiger übergeben, in diesem Fall eine Instanz von Hund. Eine statische Methode ist unabhängig von einer Instanz der Klasse, hier gibt es entsprechend keinen this-Zeiger.
Kann mir jemand den Text erklären? Irgendwie habe ich es nicht verstanden. Aber was ein this-Zeiger ist weiß ich.


Liebe Grüße
Xeon

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

Re: C++ Tutorial - Methoden von Basisklassen rufen

Beitrag von Xin » Di Apr 13, 2021 10:22 pm

Hey, ich habe erstmal den Code verändert:

Code: Alles auswählen

Hund * bello = new Hund();
 
bello->GibLaut();        // Standardverhalten   : hier VIRTUELL gebundene Methode Hund::GibLaut()
bello->Hund::GibLaut();  // Explizites Verhalten: hier statisch gebundene Methode Hund::GibLaut()
bello->Tier::GibLaut();  // Explizites Verhalten: hier statisch gebundene Methode Tier::GibLaut()
Da wo jetzt VIRTUELL steht, stand vorher statisch.
Xeon hat geschrieben:
Di Apr 13, 2021 2:23 pm
Achtung: auch wenn hier statische gebundene Methoden überschrieben werden, so besteht ein Unterschied zu statischen Methoden. Statisch gebundene Methoden sind an den Datentyp unverändlich gebunden, erhalten aber eine Instanz des Objektes als this-Zeiger übergeben, in diesem Fall eine Instanz von Hund. Eine statische Methode ist unabhängig von einer Instanz der Klasse, hier gibt es entsprechend keinen this-Zeiger.
Kann mir jemand den Text erklären? Irgendwie habe ich es nicht verstanden. Aber was ein this-Zeiger ist weiß ich.
Den Text habe ich auch etwas angepasst, guck mal, ob das weiterhilft, ansonsten muss ich nochmal ran. :-)

Achtung: auch wenn hier statische gebundene Methoden überschrieben werden, so besteht ein Unterschied zu statischen Methoden (Methoden im Namensraum der Klasse, die als ''static'' deklariert sind). Statisch gebundene Methoden sind an den Datentyp gebunden, erhalten eine Instanz des Objektes als ''this''-Zeiger übergeben. In diesem Fall die Instanz von ''Hund''. Eine statische Methode ist unabhängig von einer Instanz der Klasse, hier gibt es entsprechend keinen ''this''-Zeiger, es handelt sich um eine ganz normale Funktion, die sich im Namensraum der Klasse.
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: 128
Registriert: So Dez 17, 2017 4:10 pm

C++ Tutorial - Mehrfachvererbung

Beitrag von Xeon » Mi Apr 14, 2021 2:15 pm

Hallo zusammen

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

Ich verstehe schon wieder was nicht:
Die Referenz auf ein FullHDTelevision kann nun in einer Liste von Display-Instanzen genauso gehalten werden, wie in einer Liste von PowerConsumer-Instanzen. Genauso können Funktionen, die eine Referenz auf eine Display-Instanz oder eine Referenz auf eine PowerConsumer-Instanz benötigen, mit einer FullHDTelevision-Instanz gerufen werden.

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

Re: C++ Tutorial

Beitrag von Xin » Mi Apr 14, 2021 2:25 pm

Könntest Du die Frage präzisieren?

Oder mir zumindest sagen, was Du verstehst und wo das nicht reinpasst?
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: 128
Registriert: So Dez 17, 2017 4:10 pm

Re: C++ Tutorial

Beitrag von Xeon » Mi Apr 14, 2021 2:30 pm

Xin hat geschrieben:
Mi Apr 14, 2021 2:25 pm
Könntest Du die Frage präzisieren?

Oder mir zumindest sagen, was Du verstehst und wo das nicht reinpasst?
Was meinst du mit Liste? Verkettete Liste?

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

Re: C++ Tutorial

Beitrag von Xin » Mi Apr 14, 2021 2:33 pm

Ja, zum Beispiel.

std::list< Display * > oder std::vector< Display * > oder std::set< PowerConsumer * >

Eine Ansammlung mit einer Referenz auf ein Display. Das FullHDDisplay kannst Du überall verlinken.
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.

Antworten