Operator Überladung - Fragen
-
drösig schrieb:
was hat das jetzt mit dem BCB zu tun ?
Hat der BCB diesbezüglich eine Abweichung vom Standard ?Nö.
-
Okay, dann hab ich noch ne Frage. Woher weiß der Compiler dass wenn ich
*return this;
mache, er das richtige zurückgibt, sprich also die Werte:
Wert[0]
Wert[1]
bzw. stimmt das überhaupt?Und noch ne 2. Frage. Nach dem ich das *return this; eingefügt hab und die Deklaration/Definition geändert hab, geht das
Vektor1 + Vektor1 + Vektor1 + Vektor1;
noch nicht wirklich. Der Compiler bringt zwar keinen Fehler, aber es kommt das selbe heraus wie
Vektor1 + Vektor1;
wahrscheinlich speichert er die Variable nicht, was mich zur nächsten Frage bringt. Wieso geht folgendes nicht?
Vektor1 = Vektor1 + Vektor1;Gruß Giovanni
-
Ich würde sagen, das sind C++ Fragen und die haben in diesem Fall nichts mit dem BCB zu tun.
-
a) ist dies ein VCL Forum, welches VCL spezifische Probleme behandelt
b) Für C++ spezifische Probleme ist das C++ Forum da
c) Beachte für die Zukunft doch bitte die kleine Regel: Pro Thread 1 Frage und pro Frage 1 Thread.->Verschoben
-
Dieser Thread wurde von Moderator/in junix aus dem Forum Borland C++ Builder (VCL/CLX) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Jede Instanz besitzt einen versteckten Parameter der auf die Instanz, also auf sich selbst zeigt.
class A { int a; public: A foo(){return *this}; //gibt sich selbst zurück } int main() { A oa; oa.foo(); return 0; }
operator+ sollte den rückgabewert der Klasse besitzen:
Vektor& operator+(Vektor& op1) { this->Wert[0] = op1.Wert[0]; this->Wert[1] = op1.Wert[1]; return *this; };
So ist auch eine Verkettung möglich, wie Vektor1 + Vektor1 + Vektor1 + Vektor1;
Wenn du fragen hast als her damit, find dass ich es komisch erklärt habe
gruß KaraHead
-
Also um nochmal auf die Frage am Anfang zurückzukehren:
Du bist doch in der Klasse, zwar in einem anderen Objekt, aber in der KLasse, also darfst du auch auf die privaten Elemente zugreifen.Jetzt zum Rest:
return *this gibt nicht wirklich wert[0] und wert[1] zurück, sondern das gesamte aktuelle Objekt. This ist ein pointer auf das aktuelle Objekt und all seine Attribute und Methoden werden durch *this zurückgegeben. An dieser Stelle muss das Objekt, was die Rückgabe erwartet natürlich von der gleichen Klasse oder einer Basisklasse sein.Die anweisung Vektor1 = ... funzt nicht, weil du auch den operator= überladen musst. C++ kreiert zwar STandartoperatoren, die hier aber nichts nützen, weil ein komplettes Array nicht vom Standart operator= übergeben werden kann.
Warum vektor1 +vektor1 +vektor1+... nciht funzt, keine AHnung, müsste dafür mehr von deinem Prog sehn...
-
So, hier ist noch mal der Quelltext, bei dem das Überladen des + Operators nicht richtig funktioniert. Weiß aber nicht wieso. Hoffe jemand kann mir helfen.
#include <iostream.h> #include <conio.h> class Vektor { private: int Wert[2]; public: Vektor (); void SetVektor (int *); int* GetVektor (); Vektor operator + (Vektor); }; Vektor::Vektor () { Wert[0] = 0; Wert[1] = 0; } void Vektor::SetVektor (int *Vektor) { this->Wert[0] = Vektor[0]; this->Wert[1] = Vektor[1]; } int* Vektor::GetVektor () { return &this->Wert[0]; } Vektor Vektor::operator + (Vektor V) { this->Wert[0] = this->Wert[0] + V.Wert[0]; this->Wert[1] = this->Wert[1] + V.Wert[1]; return *this; } // ************************************************************************** // void main () { int SetWert[2] = {1,2}; int * GetWert; Vektor Vektor1; Vektor1.SetVektor(&SetWert[0]); GetWert = Vektor1.GetVektor(); Vektor1 + Vektor1 + Vektor1 + Vektor1; cout << *GetWert; GetWert++; cout << "\n" << *GetWert; getch(); }
-
Also ich hab mal deine klasse zum Laufen gebracht und alles was nutzlos war weggemacht:
#include <iostream> #include <conio.h> using namespace std; class vector { int value[2]; public: vector(int va=0, int vb=0){value[0]=va;value[1]=vb;}; vector operator+(vector v1); vector operator=(vector v1); void setVector(int v1[]); void show(); }; void vector::show() { cout<<"1. "<<value[0]<<"\n2. "<<value[1]<<endl; } void vector::setVector(int v1[]) { value[0]= v1[0]; value[1]= v1[1]; } vector vector::operator+(vector v1) { vector sum; sum.value[0]= v1.value[0]+value[0]; sum.value[1]= v1.value[1]+value[1]; return sum; } vector vector::operator=(vector v1) { value[0]= v1.value[0]; value[1]= v1.value[1]; return *this; } int main() { int vv[2] = {1,2}; vector v1,v2,v3; v1.setVector(vv); v2.setVector(vv); v3=v1+v2; v3.show(); getch(); return 0; }
gruß KaraHead
-
Kann mir denn keiner helfen, finde den Fehler einfach nicht!
-
Aaaaaaaahh, eine Antwort. Danke, muss jetzt mal gleich ausprobieren!