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++.



  • ja, c++/cli

    ich habs hieraus:

    http://www.c-plusplus.net/forum/232010-full



  • 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:

    1. Wieso C++/CLI?
    2. 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 😉


Anmelden zum Antworten