Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > operator++ и.т.п Продолжение =)


Автор: kkkggg 17.6.2006, 20:02
#include <iostream.h>
class complex 
{
public:
int r,i;
complex (int re,int im) {r = re; i = im;}
complex operator++(const complex&);
};

complex complex::operator++(complex& ARG)
{
    ARG.r = ARG.r + 1;
    ARG.i = ARG.i + 1;
    return *this;
}

int main ()
{
complex a = complex(1,1);
a++;
cout << a.re << "  " << a.im << endl;

return 0;
}


Хотелось бы узнать,  что сдесь не так? 

Автор: 0x07L 17.6.2006, 20:14
В main имеем

Цитата(kkkggg @  17.6.2006,  20:02 Найти цитируемый пост)
cout << a.re << "  " << a.im << endl;


Между тем в объявлении класса complex

Цитата(kkkggg @  17.6.2006,  20:02 Найти цитируемый пост)
int r,i;


Добавлено @ 20:18 
И еще. Операнд типа complex в метод operator++ передается неявно через this.
operator++, насколько я понимаю, здесь не должен иметь аргументов.

Добавлено @ 20:19 
А еще похоже, что ты забыл const в определении operator++. 

Автор: Fedor 17.6.2006, 20:20
Преинкремент
Код

complex complex::operator++()
{
   this->r++;
   return *this;
}


Постинкремент
Код

complex complex::operator++(int)
{
   complex resValue = *this;
   this->r++;
   return resValue;
}
   

Автор: 0x07L 17.6.2006, 20:21
2_Fedor

Вот-вот 

Автор: LPBOY 17.6.2006, 22:59
Fedor, если придерживать традиционной семантики, то префиксный инкремент должен возвращать ссылку complex&, а постфиксный const complex.

P.S. Хотя нужны ли вообще классу complex операторы инкремента, это еще вопрос. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)