2015-06-06 4 views
0

У меня есть эта ссылка http://www.codingunit.com/unary-and-binary-operator-table. В нем указано, что указатель на член оператор двоичный оператор.Оператор:

У меня есть этот код:

class test 
{ 
public: 
    int num; 
    test(int j) 
    { 
     num=j; 
    } 
    test* operator->() 
    { 
     this->num; 
    } 
}; 

int main() 
{ 
    test T(5); 
    cout<<"Number is :"<<T->num; 
} 

Как я знаю, не статическая функция член бинарного оператора принимает один аргумент, но в соответствии с этой программой, если я обеспечиваю это один аргумент. У этого есть ошибка, в которой говорится, что test * operator -> (int x) должен быть test * operator -> (void).

+0

Возможный дубликат [Операторы доступа для операторов перегрузки ->,. \ * (C++)] (http://stackoverflow.com/questions/8777845/overloading-member-access-operators-c) –

ответ

0

Чтобы получить ожидаемый результат, вам необходимо изменить программу следующим образом:

test* operator->() 
{ 
    return this; 
} 
}; 

int main() 
{ 
test T(5); 
cout<<"Number is :"<<T->num; 
} 

В функции перегрузки оператора, вы должны вернуть this указатель. Поскольку ваш оператор перегружает функцию для ->, он не принимает параметр, поэтому, когда вы его вызываете, вам не нужно передавать значение параметра. Таким образом, вызов функции должен быть T->num;

+0

Это тоже работает. У меня был выход. Когда я делаю ** this-> num ** без использования return. Он отлично работает. –

+0

Когда вы используете 'this-> num', вы не вызываете перегруженный оператор функции. Даже вы прокомментируете свой оператор над загруженной функцией, если вы используете 'this-> num'. – Steephen

+0

Тогда что я делаю? Я имею в виду, если я не призываю, тогда я тоже не должен получать вывод? –

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