Russian Qt Forum
Ноябрь 16, 2024, 01:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перегрузка оператора  (Прочитано 4124 раз)
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!

Почему так?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Апрель 11, 2013, 08:38 »

Вот так надо:
*a += 5;
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
CJ1
Гость
« Ответ #2 : Апрель 11, 2013, 08:41 »

да это я знаю! Так работает. Но что тут то не так? Почему так не работает?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Апрель 11, 2013, 08:44 »

А с чего ты взял, что не работает? Ты берешь указатель и прибавляешь число 5 к указателю. Соответственно, указатель теперь указывает на мусор и что там находится не определено. В твоем случае, 0.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
CJ1
Гость
« Ответ #4 : Апрель 11, 2013, 08:45 »

ну ок, это я тоже понимаю, и это единственный вариант выходит так? Использовать как *a += 5;??
Записан
CJ1
Гость
« Ответ #5 : Апрель 11, 2013, 08:48 »

Все... Понял, никак иначе... дошло))) Спасибо
Записан
carrygun
Гость
« Ответ #6 : Апрель 11, 2013, 11:31 »

Ну вот так еще можно a->operator+=(5); Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.