C++ Tutorial

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

C++ Tutorial

Beitrag von Xeon » Mo Feb 01, 2021 5:00 pm

Hallo Xin

Ich möchte hier auf proggen.org mit dem C++ Tutorial starten.
Lässt du noch das C++ Tutorial drin?


Liebe Grüße
Xeon

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

Re: C++ Tutorial

Beitrag von Xin » Di Feb 02, 2021 11:28 am

Warum sollte ich es rausnehmen... ich plane es neu zu schreiben, aber das wäre in einem anderen Namensraum und wenn das fertig (irgendwann) ist, dann kille ich das jetzige Tutorial.
Einige Teile werde ich übernehmen, aber ich werde einen anderen Ansatz probieren. Das jetzige geht ja noch eher 'traditionell' vor.
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: 129
Registriert: So Dez 17, 2017 4:10 pm

C++ Tutorial Objekte konstruieren

Beitrag von Xeon » Di Mär 16, 2021 2:05 pm

Hallo zusammen

Hier der Link:

https://www.proggen.org/doku.php?id=cpp:class:construct

Folgenden Text verstehe ich nicht:
class Node
{
Node * Next;
Node * Prev;
List * Owner;
Data data;

Node( Node & previous );
};

Möchte man nun eine neue Node erzeugen und mit dem Konstruktor in die Liste einhängen, so lässt sich das programmieren, aber sobald eine Node kopiert werden soll, so wird die Kopie mit in die Liste eingehängt. Dies führt mit Garantie zu Problemen. Der Konstruktor, der den gleichen Typ als einziges Argument nimmt, muss als Kopierkonstruktor der Daten verwendet werden. Das bedeutet hier, dass die Daten kopiert werden müssen, und die Node selbst in keiner Liste eingehängt wird, damit wirklich nur kopiert wird und keine anderen Datenstrukturen verändert werden.
Kann mir jemand nur den Text erklären? Den Code nicht.


Liebe Grüße
Xeon

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

Re: C++ Tutorial Objekte konstruieren

Beitrag von Xin » Di Mär 16, 2021 2:16 pm

Xeon hat geschrieben:
Di Mär 16, 2021 2:05 pm
Hallo zusammen

Hier der Link:

https://www.proggen.org/doku.php?id=cpp:class:construct

Folgenden Text verstehe ich nicht:
class Node
Möchte man nun eine neue Node erzeugen und mit dem Konstruktor in die Liste einhängen, so lässt sich das programmieren, aber sobald eine Node kopiert werden soll, so wird die Kopie mit in die Liste eingehängt. Dies führt mit Garantie zu Problemen. Der Konstruktor, der den gleichen Typ als einziges Argument nimmt, muss als Kopierkonstruktor der Daten verwendet werden. Das bedeutet hier, dass die Daten kopiert werden müssen, und die Node selbst in keiner Liste eingehängt wird, damit wirklich nur kopiert wird und keine anderen Datenstrukturen verändert werden.
Kann mir jemand nur den Text erklären? Den Code nicht.
Der Konstruktor, der automatisch eine Node hinter der als Parameter übergebenen anhängt, hat die gleiche Signatur wie der Copy-Constructor (auch wenn dieser in der Regel Point const & ist). Man kann also nicht unterscheiden, ob Node( otherNode ) jetzt otherNode in die Liste einhängt oder otherNode kopiert wird, wie man das vermutlich erwartet. Ein Konstruktor, der wie ein Copy-Construktor aussieht, aber keiner ist, widerspricht also der üblichen Erwartungen, weswegen man sowas besser anders löst.

Aber ich glaube, an den Text sollte ich nochmal ran. :-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: 129
Registriert: So Dez 17, 2017 4:10 pm

C++ Tutorial Statische Member

Beitrag von Xeon » Mi Mär 17, 2021 1:35 pm

Hallo Xin

Ich weiß nicht ob du den Fehler bewusst oder unbewusst gemacht hast, aber ich stelle mal den Code rein.

Hier der Link:

https://www.proggen.org/doku.php?id=cpp:class:static

Code: Alles auswählen

class Math
{
public:
  static double PI = 3,14159265;
 
  static double Circumference( double radius );
};
Bei der Kommazahl sollte ein Punk sein statt ein Komma.

Code: Alles auswählen

double Math::Circumference( double radius );
{
  return 2 * PI * radius;
}
Beim Funktionskopf sollte kein Semikolon stehen.


Liebe Grüße
Xeon

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

Re: C++ Tutorial Statische Member

Beitrag von Xin » Mi Mär 17, 2021 6:05 pm

Xeon hat geschrieben:
Mi Mär 17, 2021 1:35 pm
Ich weiß nicht ob du den Fehler bewusst oder unbewusst gemacht hast, aber ich stelle mal den Code rein.
Ich bin bemüht, Fehler ausschließlich unbewusst zu machen. ;-)
Xeon hat geschrieben:
Mi Mär 17, 2021 1:35 pm
Hier der Link:
Beide Fehler korrigiert, vielen Dank! :-)
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: 129
Registriert: So Dez 17, 2017 4:10 pm

C++ Tutorial - Referenzen als Member

Beitrag von Xeon » Mi Mär 31, 2021 4:01 pm

Hallo zusammen

Bin nun hier angelangt:

https://www.proggen.org/doku.php?id=cpp:ref:member

Ich habe alles abgetippt unten, doch leider will der Compiler nicht übersetzen. Hier mal der Code:

Die main Funktion:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>

#include "rect.h"

int main()
{
  Rectangle * myRect;

  Point topLeft( 1, 2 );
  Point bottomRight( 3, 4 );

  myRect = new Rectangle( topLeft, bottomRight );
  myRect->Print( "myRect" );

  delete myRect;

  return 0;
}
Headerdatei rect.h:

Code: Alles auswählen

#ifndef RECT_H_INCLUDED
#define RECT_H_INCLUDED

#include "point.h"

class Rectangle
{
public:
  Point & TopLeft;
  Point & BottomRight;

  Rectangle( int left, int top, int width, int height );

  void Print( char const * prefix );
};

Rectangle( Point & topLeft, Point & bottomRight );

#endif // RECT_H_INCLUDED
Headerdatei point.h:

Code: Alles auswählen

#ifndef POINT_H_INCLUDED
#define POINT_H_INCLUDED

class Point
{
  public:
    int XPosition;
    int YPosition;

    Point();
    Point( int x, int y );

    void Print( char const * prefix );
};

#endif // POINT_H_INCLUDED
rect.cpp:

Code: Alles auswählen

#include <stdio.h>
#include "rect.h"

Rectangle::Rectangle( Point & topLeft, Point & bottomRight )
  : TopLeft( topLeft )
  , BottomRight( bottomRight )
{
  printf( "Rectangle-Konstruktor\n" );
}

void Rectangle::Print( char const * prefix )
{
  printf( "Rectangle %s contains: \n", prefix );
  TopLeft.Print( "topleft" );
  BottomRight.Print( "bottomRight" );
}
point.cpp

Code: Alles auswählen

#include <stdio.h>
#include "point.h"

Point::Point()    // Default-Konstruktor
  : XPosition(0)
  , YPosition(0)
{
  printf( "Point: Default-Konstruktor\n" );
}

Point::Point( int x, int y )
  : XPosition( x )
  , YPosition( y )
{
  printf( "Point: Konstruktor setzt Werte auf %d/%d\n", x, y );
}

void Point::Print( char const * prefix )
{
  printf( "%s: %d/%d\n", prefix, XPosition, YPosition );
}

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

Re: C++ Tutorial - Referenzen als Member

Beitrag von Xin » Mi Mär 31, 2021 4:42 pm

Xeon hat geschrieben:
Mi Mär 31, 2021 4:01 pm
Ich habe alles abgetippt unten, doch leider will der Compiler nicht übersetzen.
...sondern er gibt folgende Fehlermeldung raus...? ^^

Ich habe den Text der Seite etwas angepasst. Du hast den geänderten Konstruktor unter die Klasse Rect kopiert. Der Konstruktor muss schon in der Klasse stehen. Die geänderten Konstruktoren ersetzen die vorherige Variante.
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: 129
Registriert: So Dez 17, 2017 4:10 pm

Re: C++ Tutorial

Beitrag von Xeon » Mo Apr 05, 2021 2:36 pm

Xin hat geschrieben: Ich habe den Text der Seite etwas angepasst. Du hast den geänderten Konstruktor unter die Klasse Rect kopiert. Der Konstruktor muss schon in der Klasse stehen. Die geänderten Konstruktoren ersetzen die vorherige Variante.
Ich habe es jetzt so gemacht wie du geschrieben hast:

Code: Alles auswählen

class Rectangle
{
  public:
    Point & TopLeft;
    Point & BottomRight;

    Rectangle( Point & topLeft, Point & bottomRight );

    void Print( char const * prefix );
};
Danke Xin, jetzt geht es wunderbar!

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

C++ Tutorial - Dynamisch Referenzen erzeugen

Beitrag von Xeon » Di Apr 06, 2021 2:55 pm

Hallo zusammen

Ich schon wieder. Bin hier angelangt:

https://www.proggen.org/doku.php?id=cpp:ref:new

Folgenden Text verstehe ich nicht:
NULL-Pointer mit Referenzen ersetzen

Da man keinen Nullpointer an eine Referenz übergeben darf, wird gelegentlich mit Null-Instanzen gearbeitet. Dies ist eine Instanz der gewünschten Klasse, dass jedoch keine Funktion besitzt. Meist ist es ein statischer Member der Klasse, dessen (virtuelle) Funktionen beispielsweise so überschrieben sein können, dass sie keine Handlung mehr vornehmen. Die Null-Instanz kann so als Marker dienen, um sich von gültigen Instanzen zu unterscheiden. Wird eine Funktion des Markers gerufen, geschieht nichts.
Was ist denn eine virtuelle Funktion?


Liebe Grüße
Xeon

Antworten