AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[C++] Was geschieht hier genau?

Ein Thema von Lyan · begonnen am 19. Dez 2014 · letzter Beitrag vom 19. Dez 2014
Antwort Antwort
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#1

[C++] Was geschieht hier genau?

  Alt 19. Dez 2014, 12:34
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
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

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

  Alt 19. Dez 2014, 12:37
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).
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (19. Dez 2014 um 12:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

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

  Alt 19. Dez 2014, 12:41
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 *.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#4

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

  Alt 19. Dez 2014, 12:42
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 >.<
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

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

  Alt 19. Dez 2014, 12:48
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;
   }
};
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#6

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

  Alt 19. Dez 2014, 15:41
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

Geändert von Lyan (19. Dez 2014 um 15:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

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

  Alt 19. Dez 2014, 16:03
Bei dem multyply gibt es eine Fehlermeldung, eine Ahnung woran das liegt? (#36h awake braindead)
Ja, es heißt multiply.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#8

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

  Alt 19. Dez 2014, 16:14
Bei dem multyply gibt es eine Fehlermeldung, eine Ahnung woran das liegt? (#36h awake braindead)
Ja, es heißt multiply.
Ouch gute nacht
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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