Название: Перегрузка оператора Отправлено: 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); :)
|