Operatorenüberladung
-
hi,
also ich habe folgendes Problem:
ich programmiere eine Klasse Vector3, mit den double-Werten x,y und z.
wenn ich nun zwei vektoren addieren möchte müsste das leider so aussehen:
Vector3 ^vektor1 = gcnew Vector3(0,0,0) //... vektor1->x = vektor2->x + vektor3->x; //...
ich möchte aber, dass man schreiben kann:
Vector3 ^vektor1 = gcnew Vector3(0,0,0); // vektor2 und vektor3 noch vektor1 = vektor2 + vektor3;
Dafür müsste ich den + - Operatoren überladen (und dann wohl noch -, /, * usw.)
Die Erklärungen, die ich mir ergooglelt habe, habe ich alle nicht verstanden,
und funktionieren tuts bei mir auch nciht.Kann mir jemand erklären, wie ich die Überladung scripten müsste?
Mein Ansatz:
ref class Vector3 { public: double x, y, z; public: double Betrag; public: Vector3(double ix, double iy, double iz) { x = ix; y = iy; z = iz; Betrag = Math::Sqrt((x*x) + (y*y) + (z*z)); /*while (true) { if (ix != x || iy != y || iz != z) { ix = x; iy = y; iz = z; Betrag = Math::Sqrt((x*x) + (y*y) + (z*z)); }*/ //} } public: void BetragRefresh() { Betrag = Math::Sqrt((x*x) + (y*y) + (z*z)); } const X operator+(X const& lhs,X const& rhs) { X tmp(lhs); tmp += rhs; return tmp; } };
Kann mir jemand helfen?
Dankeschön schonmal im voraus
Player894
-
Das ist kein C++.
-
-
Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ (auch C++0x und C++11) in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Dat Beispiel hantiert mit 'X', und deine Klasse heißt...
-
Diese Referenzierung kann nicht für den Typ "const Vector3::Vector3" verwendet werden. Der Compiler ersetzt "&" durch ^", um die Analyse fortzusetzen.
Diese Referenzierung kann nicht für den Typ "const Vector3::Vector3" verwendet werden. Der Compiler ersetzt "&" durch ^", um die Analyse fortzusetzen.
Vector3::Vector3::operator +': Fehler in Funktionsdeklaration; Funktionstext wird übersprungen
Diese Fehlermeldungen bekomme ich
-
Nur mal rein prinzipiell:
- Wieso C++/CLI?
- Wieso einen Vector3 zu einer ref class machen? Wieso nicht value class?
-
was ist denn value?
also das problem ist ja, dass in der instanz nicht die daten gespeichert werden, sondern in den instanzvariablen.
oder geht das hier doch?
Vector3 vektor = gcnew Vector3(0,0,0); tuewas(vektor); //in bezug auf die o.g. klasse
können die GANZEN instanzvariablen so übergebben werden?
also das mann nicht die funktion dreimal aufrufen muss wegen ->x, y und z
Alle die ich gefragt habe, waren überfragt
bitte um hilfe
Player894
-
also zu meinem letzten Beitrag: es geht.
allerdings habe ich das mit der Operatorenüberladung trotzdem nicht hingekriegt