Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Викдон
67 / 67 / 4
Регистрация: 21.11.2008
Сообщений: 226
#1

Перегрузка оператора ++ - C++

03.03.2009, 00:13. Просмотров 1586. Ответов 11
Метки нет (Все метки)

вот простенькая прога:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "stdafx.h"
#include "iostream"
 
using namespace std;
 
 
class My{
public:
    My(){itsAge=0;}
    ~My(){}
    My(int a):itsAge(a){}
    void Set(int a){itsAge=a;}
    
    const My& operator ++ (){
                itsAge++;
       My Temp(itsAge);
      return  Temp;
    }
private:
    int itsAge;
 
};
  
 
int main()   
{    
    My Frisky;
    Frisky.Set(5);
     My One=++Frisky;
 
     
 
 
    return 0;   
}
Вот в чем возник вопрос: operator ++ возвращает ссылку на класс My, а точнее на локальный объект Temp. Но при возвращении из operator++ Temp удаляется и получается operator++ возвращает ссылку на несуществующий объект? Но в строке
C++
1
My One=++Frisky;
объекту One присваивается нужное значение? почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2009, 00:13     Перегрузка оператора ++
Посмотрите здесь:

Перегрузка оператора - C++
Доброго всем времени. пытаюсь написать свой класс надстройка на одномерный массив. У меня вот возникло затруднение с перегрузками...

Перегрузка оператора == - C++
Я уже встречала подобный вопрос на этом форуме, но у меня всё равно что-то не получается Вот виртуальная ф-ция, которую я вызываю в...

перегрузка оператора! - C++
Помогите сложить диагонали , при помоши перегрузки оператора+, чтобы можно было написать в maine: c1+c2+c3.заранее спасибо! ...

Перегрузка оператора -- - C++
Добрый день, у меня возникла небольшая проблема. Дело в том, что display() работает нормально. Только я не могу понять, что нужно сделать,...

Перегрузка оператора = - C++
Нужно перегрузить оператор так что бы в начале строки и в конце были квадратные скобки . Все почти работает только вот вывод на экран не...

Перегрузка оператора == и др - C++
C++ Builder ругаеться на перегрузку операторов. На mingw32-g++ все компилилось нормально. Пример пергрузки взял с хабра описание...

Перегрузка оператора += - C++
Создал класс дробь. Пытаюсь перегрузить оператор += (или -=, *=, /=) А компилятор выдаёт ошибку 'drob operator+=(drob&)' must take...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RazorQ
577 / 344 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
03.03.2009, 09:56     Перегрузка оператора ++ #2
Помойму здесь надо сделать дружественную функцию класса(код писать не буду, некогда)
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,365
03.03.2009, 10:06     Перегрузка оператора ++ #3
Цитата Сообщение от Викдон Посмотреть сообщение
Но в строке [....] объекту One присваивается нужное значение? почему?
Повезло. Как карта ляжет.....
Правильно так:
C++
1
2
3
4
const My& operator ++ () {
    ++itsAge;
    return *this;
}
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
03.03.2009, 10:08     Перегрузка оператора ++ #4
Потому что при возпращении ссылки создается копия temp, вот ссылка на нее и возвращается.
Викдон
67 / 67 / 4
Регистрация: 21.11.2008
Сообщений: 226
03.03.2009, 10:10  [ТС]     Перегрузка оператора ++ #5
Так ведь при возвращении ссылки конструктор копиования же не вызывается? Ведь для этого же нужно использовать ссылку?
Absolute
0 / 0 / 0
Регистрация: 27.12.2008
Сообщений: 3
03.03.2009, 11:45     Перегрузка оператора ++ #6
C++
1
2
3
4
5
6
public:   
    My(){itsAge=0;cout<<"def constr"<<endl;}   
    ~My(){cout<<"destruct"<<endl;}   
    My(int a):itsAge(a){cout<<"constr"<<endl;}
    My(const My& initMy){itsAge = initMy.itsAge; cout<<"copy constr"<<endl;}
    void Set(int a){itsAge=a;}
попробуй так посмотреть.

Добавлено через 7 минут 19 секунд
а ето к тому, что конструктор копирования вызывается.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,365
03.03.2009, 12:44     Перегрузка оператора ++ #7
Цитата Сообщение от Викдон Посмотреть сообщение
Но в строке [....] объекту One присваивается нужное значение? почему?
В предыдущем сообщении я был не прав. По Стандарту 8.5.3, ссылка на константный временный объект будет "держать" его до выхода из объемлющего блока, в твоем случае - из функции main().
Что же касается кода, то для префиксного инкремента правильный код такой и должен быть, как я привел.
Викдон
67 / 67 / 4
Регистрация: 21.11.2008
Сообщений: 226
04.03.2009, 01:07  [ТС]     Перегрузка оператора ++ #8
Ну у меня вызывается деструктор на строке "return Temp;" и я даже делал возвращение не на const объект и все равно работает...?

Добавлено через 47 минут 13 секунд
Да и еще один вопросик) Вот у меня есть пользовательский конструктор копирования в классе, И при операции "=" над объектами класса он почему то не вызывается?
Фенрир
42 / 38 / 2
Регистрация: 05.01.2009
Сообщений: 394
04.03.2009, 15:06     Перегрузка оператора ++ #9
нужно перегрузить оператор =
конструктор копии вызывается при инициализации 1го объекта класса другим.

Добавлено через 2 минуты 37 секунд
C++
1
2
3
4
5
6
7
8
   My& operator = (const My& other)
    {     if (this!=&other)
          {  
              //--------------
           }
         return *this;
 
    }
Викдон
67 / 67 / 4
Регистрация: 21.11.2008
Сообщений: 226
04.03.2009, 22:48  [ТС]     Перегрузка оператора ++ #10
Ну у меня вызывается деструктор на строке "return Temp;" и я даже делал возвращение не на const объект и все равно работает...?
indefini
1 / 1 / 0
Регистрация: 12.02.2009
Сообщений: 11
05.03.2009, 03:24     Перегрузка оператора ++ #11
объекту One присваивается нужное значение? почему?
Нужное - это какое? И почему бы и не присваиваться тому, что присваивается?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2009, 11:17     Перегрузка оператора ++
Еще ссылки по теме:

Перегрузка оператора ++ - C++
Что делает оператор ++ при его перегрузке?

перегрузка оператора + - C++
Не могу понять: в 184 строке отказывается работать. Без нее - все нормально. Скорее всего неправильно переопределил +.... Но если...

Перегрузка оператора *= - C++
как для заданного класса point перегрузить оператор *= всеми возможными способами (член класса, друг класса)? P.S. оператор *= должен...

Перегрузка оператора << - C++
Есть такой код. class matrix { public: ......; const double* operator(int) const; double* const operator(int); friend...

Перегрузка оператора = - C++
Как перегрузить оператор = для char ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Викдон
67 / 67 / 4
Регистрация: 21.11.2008
Сообщений: 226
05.03.2009, 11:17  [ТС]     Перегрузка оператора ++ #12
Объекту One присваивается значение объекта Frisky увеличенное на единицу.
Yandex
Объявления
05.03.2009, 11:17     Перегрузка оператора ++
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru