Pointerfrage
-
Hallo zusammen,
ich verstehe gerade eine bestimmte Sache nicht und bitte euch um eure Hilfe. Ich habe eine Methode, die einfach ein Wort auf ein Panel schreibt.void TExample::Method (String Wort) { Form1->Panel1->Caption = Wort; // eine einfache Methode } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click (TObject *Sender) { Example1->Method (“Hallo”); // Aufruf der Methode }
Nun habe ich den Operator “+” überladen. So sieht der Quelltext aus;
void TExample::operator +(String Wort) { Form1->Panel1->Caption = Wort; // Überladung des Operators } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click (TObject *Sender) { *Example1 + “Hallo” }
Ich verstehe nicht, warum ich beim überladenen Operator mit einem Zeigeoperator arbeiten muss. Dieser ist ja zwingend notwendig, denn sonst kommen Fehlermeldungen. Außerdem verstehe ich nicht, warum ich das „Hallo“ nicht in Klammern schreiben muss. Es handelt sich dabei doch um einen normalen Parameter?!
Vielen Dank für eure Hilfe,
lg, freakC++
-
freakC++ schrieb:
Ich verstehe nicht, warum ich beim überladenen Operator mit einem Zeigeoperator arbeiten muss.
Wenn du deine Überladung als Methode von TExample definiert hast, dann muß der linke Operand vom Typ TExample& (bzw. const TExample&) sein. Example1 ist aber offenbar vom Typ TExample*.
freakC++ schrieb:
Außerdem verstehe ich nicht, warum ich das „Hallo“ nicht in Klammern schreiben muss. Es handelt sich dabei doch um einen normalen Parameter?!
Wenn du einen Operatoren überlädst, kannst du die Überladung genauso benutzen wie die Operatoren der intrinsischen Typen, syntaktisch also nicht wie einen Funktionsaufruf, sondern wie eine binäre Operation. Du kannst eine Operatorüberladung aber auch explizit als Funktion aufrufen:
Example1->operator + ("Hallo");