Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [C++] Was geschieht hier genau? (https://www.delphipraxis.net/183204-%5Bc-%5D-geschieht-hier-genau.html)

Lyan 19. Dez 2014 12:34

[C++] Was geschieht hier genau?
 
Code:
struct vec2 {
    float x, y;
    vec2(float x, float y) : x(x), y(y) {}
};

vec2 operator + (vec2 a, vec2 b) {
    return vec2(a.x + b.x, a.y + b.y);
}

vec2 operator - (vec2 a, vec2 b) {
    return vec2(a.x - b.x, a.y - b.y);
}

vec2 operator * (float s, vec2 a) {
    return vec2(s * a.x, s * a.y);
}
Also ich verstehe es nur 'halb'. Ich nehme zz an folgendes richtig zu verstehen:
vec2 ist definiert als record mit variablen float x und y. vec2 [operator] vec2 returned einfach x und y addiert/subtrahiert von 2 vectoren bzw. multiplikation s mit x und y eines einzigen vectors.

vec2(float x, float y) : x(x), y(y) {}

Da bin ich mir nicht sicher.. Soll das ein Konstruktor sein?
Bitte erklären danke :)

Zacherl 19. Dez 2014 12:37

AW: [C++] Was geschieht hier genau?
 
Ja,
Code:
vec2(float x, float y) : x(x), y(y) {}
ist in der Tat der Constructor, wobei der etwas seltsam aussehende Teil nach dem : eine sogenannte "Initializer List" ist, die die privaten member Variablen x und y mit den Werten der Constructor-Parameter x und y initialisiert. In den { } könnte noch weiterer Code stehen, welcher nach der Konstruktion des Objekts ausgeführt wird.

Die Operatoren + und - sind überladen, damit man hinterher im Code z.b. einfach Vec1 + Vec2 schreiben kann, um eine Vektoraddition durchzuführen. Analog dazu der Operator *, welcher eine Skalarmultiplikation ausführt (Vec1 * 203).

Neutral General 19. Dez 2014 12:41

AW: [C++] Was geschieht hier genau?
 
Code:
vec2 operator + (vec2 a, vec2 b) {
    return vec2(a.x + b.x, a.y + b.y);
}
Da wird der "+"-Operator überladen sodass er mit dem record "vec2" funktioniert.
Das gleiche gibts dann noch für - und *.

Lyan 19. Dez 2014 12:42

AW: [C++] Was geschieht hier genau?
 
Code:
struct vec2 {
    float x, y;
    vec2(float x, float y)
   {
      x = x;
      y = y;
   }
};
Also wäre das das gleiche, okay vielen Dank, hätte ich auch selbst drauf kommen können >.<

Zacherl 19. Dez 2014 12:48

AW: [C++] Was geschieht hier genau?
 
Zitat:

Zitat von Lyan (Beitrag 1284112)
Also wäre das das gleiche

Ja genau, das hier in etwa hätte den selben Effekt:
Code:
struct vec2 {
    float x, y;
    vec2(float x, float y)
   {
      this->x = x;
      this->y = y;
   }
};

Lyan 19. Dez 2014 15:41

AW: [C++] Was geschieht hier genau?
 
Delphi-Quellcode:
type
  vec2 = packed record
    x,y:double;
    constructor Create(xi, yi: Double);
    class operator add(v1, v2: vec2): vec2;
    class operator subtract(v1, v2: vec2): vec2;
    class operator multyply(d : double; v1 : vec2): vec2;
  end;

  TMainFrm = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;


var
  MainFrm: TMainFrm;

implementation

{$R *.dfm}

constructor vec2.Create(xi, yi: Double);
begin
  x := xi;
  y := yi;
end;

class operator vec2.add(v1, v2: vec2): vec2;
begin
  Result.x := v1.x + v2.x;
  Result.y := v1.y + v2.y;
end;

class operator vec2.subtract(v1, v2: vec2): vec2;
begin
  Result.x := v1.x - v2.x;
  Result.y := v1.y - v2.y;
end;

class operator vec2.multyply(d : double; v1 : vec2): vec2;
begin
  Result.x := d * v1.x;
  Result.y := d * v1.y;
end;
Bei dem multyply gibt es eine Fehlermeldung, eine Ahnung woran das liegt? (#36h awake braindead)

Delphi-Quellcode:
[dcc32 Fehler] UnitMain.pas(15): E2393 Ungültige Operatordeklaration
[dcc32 Fehler] UnitMain.pas(15): E2029 ',' oder ')' erwartet, aber ':' gefunden
[dcc32 Fehler] UnitMain.pas(15): E2086 Typ 'vec2' ist nicht vollständig definiert
[dcc32 Fehler] UnitMain.pas(16): E2029 Typ erwartet, aber 'END' gefunden

lg

Zacherl 19. Dez 2014 16:03

AW: [C++] Was geschieht hier genau?
 
Zitat:

Zitat von Lyan (Beitrag 1284130)
Bei dem multyply gibt es eine Fehlermeldung, eine Ahnung woran das liegt? (#36h awake braindead)

:mrgreen: Ja, es heißt multiply.

Lyan 19. Dez 2014 16:14

AW: [C++] Was geschieht hier genau?
 
Zitat:

Zitat von Zacherl (Beitrag 1284132)
Zitat:

Zitat von Lyan (Beitrag 1284130)
Bei dem multyply gibt es eine Fehlermeldung, eine Ahnung woran das liegt? (#36h awake braindead)

:mrgreen: Ja, es heißt multiply.

Ouch gute nacht :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz