Russian Qt Forum

Программирование => С/C++ => Тема начата: CJ1 от Апрель 11, 2013, 08:35



Название: Перегрузка оператора
Отправлено: CJ1 от Апрель 11, 2013, 08:35
Вот собственно перегрузка оператора +=

class A
{
public:
A()   { b = 2; }

void operator += ( const int v)
{
b +=v;
}

int b;
};

int _tmain()
{
A * a = new A;
a += 5;
std::cout << a->b;
getchar();
return 0;
}

Как видите я для объекта выделяю память A * a = new A;
В результате всегда выводится 0!!!!

Но если я создаю объект в стеке A a;

То выводит как и должно 7!

Почему так?


Название: Re: Перегрузка оператора
Отправлено: Пантер от Апрель 11, 2013, 08:38
Вот так надо:
*a += 5;


Название: Re: Перегрузка оператора
Отправлено: CJ1 от Апрель 11, 2013, 08:41
да это я знаю! Так работает. Но что тут то не так? Почему так не работает?


Название: Re: Перегрузка оператора
Отправлено: Пантер от Апрель 11, 2013, 08:44
А с чего ты взял, что не работает? Ты берешь указатель и прибавляешь число 5 к указателю. Соответственно, указатель теперь указывает на мусор и что там находится не определено. В твоем случае, 0.


Название: Re: Перегрузка оператора
Отправлено: CJ1 от Апрель 11, 2013, 08:45
ну ок, это я тоже понимаю, и это единственный вариант выходит так? Использовать как *a += 5;??


Название: Re: Перегрузка оператора
Отправлено: CJ1 от Апрель 11, 2013, 08:48
Все... Понял, никак иначе... дошло))) Спасибо


Название: Re: Перегрузка оператора
Отправлено: carrygun от Апрель 11, 2013, 11:31
Ну вот так еще можно a->operator+=(5); :)