2016-03-30 12 views
0

Ich habe diesen Code geschrieben, um eine Überlastung des unären Operators zu erreichen - mit einer Friend-Funktion. Irgendwie hat das keinen Einfluss auf die anfänglichen Werte, die ich bestanden habe.Unary - Überlastung des Operators mit Hilfe der Friend-Funktion

#include<iostream> 
//fifty6s 
using namespace std; 
class invert_position 
{ 
    int x,y; 
    public: 
     invert_position(int a,int b) 
     { 
     x=a; 
     y=b; 
     } 
    void show() 
     { 
      cout<<"\nx="<<x; 
      cout<<"\ny="<<y; 
     } 
    friend void operator -(invert_position); 
}; 
void operator -(invert_position i) 
{ 
    i.x=-i.x; 
    i.y=-i.y; 
} 
int main() 
{ 
    invert_position i(2,3); 
    -i; 
    i.show(); 
    return 0; 
} 
+1

Was macht es, wenn Sie schreiben "i = -i;' statt wenn "-i;'? –

+0

Es funktioniert so. Vielen Dank! –

Antwort

0

Es gibt einige Probleme, die ich in Ihrem geposteten Code sehe.

  1. Die operator- Funktion benötigt ein invert_position Objekt zurückzukehren. Ansonsten

    invert_position i(2,3); 
    invert_position j = -i; 
    

    ist ein Problem. Stellen Sie es sich ähnlich wie einen fundamentalen Typ vor.

    int i = 10; 
    int j = -i; // We expect j to be -10 after this. 
    

    Daher was yo brauchen, ist

    invert_position operator -(invert_position i) 
    { 
        i.x=-i.x; 
        i.y=-i.y; 
        return i; 
    } 
    
  2. Die Linie

    -i; 
    

    nicht den Wert von i in main ändert seit operator- nach Wert sein Argument erhält. Sie müssen verwenden:

    i = -i; 
    

    , um den Effekt des Aufrufs der Funktion zu sehen.

+0

Es funktioniert jetzt, danke! :) –

+0

Kann ich es auch als Referenz verwenden? –

+0

Sie könnten, aber es wird nicht idiomatisch sein. Wenn Sie 'j = -i;' verwenden, wird der Wert von 'i' nicht geändert. –

0
friend invert_position -(invert_position i) 
{   
    i.x=-i.x; 
    i.y=-i.y; 
    i.z=-i.z; 
    return i; 
} 

Und in Hauptfunktion i = -i; sollte da sein, weil Freund-Funktion ist eine Nicht-Mitglied-Funktion, so muss es die Werte zurückgeben ... Danke