2016-03-30 2 views
0

Я написал этот код, чтобы выполнить перегрузку унарного оператора - используя функцию друга. Каким-то образом, нет никакого влияния на исходные значения, которые я прошел.Unary - перегрузка оператора с помощью функции друга

#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

Что он делает, когда вы пишете 'i = -i;' вместо if -i; '? –

+0

Это работает именно так. Благодаря! –

ответ

0

Есть пара вопросов, которые я вижу в вашем опубликованном коде.

  1. operator- функция должна возвращать invert_position объект. В противном случае

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

    проблема. Подумайте об этом аналогично использованию фундаментального типа.

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

    Следовательно, то, что лет нужно

    invert_position operator -(invert_position i) 
    { 
        i.x=-i.x; 
        i.y=-i.y; 
        return i; 
    } 
    
  2. Линия

    -i; 
    

    не изменяет значение i в main поскольку operator- получает свой аргумент по значению. Вам необходимо использовать:

    i = -i; 
    

    , чтобы увидеть эффект вызова функции.

+0

Теперь он работает, спасибо! :) –

+0

Кроме того, могу ли я сделать это, назвав его ссылкой? –

+0

Вы могли бы, но это не будет идиоматично. Когда вы используете 'j = -i;', значение 'i' не изменяется. –

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

И основной функции я = -i; должен быть там, потому что функция friend является функцией не члена, поэтому ей нужно вернуть значения ... Спасибо

Смежные вопросы