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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
#1

Перегрузка постфиксной и префиксной формы оператора ++ - C++

30.11.2013, 19:41. Просмотров 2916. Ответов 6
Метки нет (Все метки)

доброго времени суток форумчане,
у меня такой вопрос, как перегрузить оператор ++
все другие операторы уже перегрузил осталась проблема только с этими двумя=(
пишу
C++
1
CMyTime const operator ++(CMyTime& time);
слово operator подчеркивает красным и все, не могу понять в чем дело
такой метод перегрузки был описан на хабре, но он не работает у меня почему то.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2013, 19:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка постфиксной и префиксной формы оператора ++ (C++):

Перегрузка постфиксной и префиксной операции инкремента - C++
Здравствуйте! У меня возник вопрос: почему выводит разный результат, казалось бы, одинаковый код Вот здесь выводит как должно: ...

Перегрузка оператора постфиксной инкрементации - C++
Пытался набросать простенький контейнер с итератором. Вот код: #include <iostream> template<typename Item> class Vector{ ...

Разница между префиксной и постфиксной формой записи счетчика цикла - C++
Здравствуйте! Когда оформлял циклы всегда использовал такую запись: for(int i=0; i<10; i++) , которая означает что цикл...

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

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

Перегрузка оператора [] - C++
При перегрузке оператора возникли проблемы, подскажыте как правильно перегрузить этот оператор, чтоб можно было устанавливать и получать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.11.2013, 19:49 #2
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
#include <iostream>
 
struct Foo
{
    int mBar;
};
 
Foo& operator ++ (Foo& value)
{
    value.mBar++;
    return value;
}
 
Foo operator ++ (Foo& value, int)
{
    Foo result(value);
    value.mBar++;
    return result;
}
 
int main()
{
    Foo f;
    ++f;
    f++;
}
но делать перегрузку операций инкремента внешними функциями плохая практика так как при следовании принципу наименьшего удивления операторы инкремента должны менять состояние объекта.
все что меняет состояние объекта лучше делать членом класса.
0
Oberyn Martell
5 / 5 / 0
Регистрация: 15.05.2013
Сообщений: 36
30.11.2013, 19:51 #3
Унарная функция-операция, определяемая внутри класса, должна быть представлена с помощью нестатического метода без параметров. Если функция определяется вне класса, она должна иметь один параметр типа класса.

Операции постфиксного инкремента и декремента должны иметь первый параметр типа int. Он используется только для того, чтобы отличить их от префиксной формы.
0
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
30.11.2013, 19:53  [ТС] #4
Цитата Сообщение от Jupiter Посмотреть сообщение
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
#include <iostream>
 
struct Foo
{
    int mBar;
};
 
Foo& operator ++ (Foo& value)
{
    value.mBar++;
    return value;
}
 
Foo operator ++ (Foo& value, int)
{
    Foo result(value);
    value.mBar++;
    return result;
}
 
int main()
{
    Foo f;
    ++f;
    f++;
}
но делать перегрузку операций инкремента внешними функциями плохая практика так как согласно принципу наименьшего удивления операторы инкремента должны менять состояние объекта.
все что меняет состояние объекта лучше делать членом класса.

так оно и есть, CMyTime это класс в реализации (срр)
пишется вот такой код
C++
1
2
3
4
5
CMyTime const CMyTime::operator++(CMyTime& time)
{
     time.seconds++;
     return time;   
}
но проблема в том что он еще в хедере подчеркивает слово оператор
0
Oberyn Martell
5 / 5 / 0
Регистрация: 15.05.2013
Сообщений: 36
30.11.2013, 19:59 #5
Попробуйте так:
C++
1
2
3
4
CMyTime & operator ++() {
   time.seconds++;
   return *this:
}
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.11.2013, 19:59 #6
Цитата Сообщение от Pokemon_93 Посмотреть сообщение
но проблема в том что он еще в хедере подчеркивает слово оператор
кто видел этот хедер кроме вас?
вы же его засекретили, а нам шоу экстрасенсов устраиваете?
0
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
30.11.2013, 20:44  [ТС] #7
Цитата Сообщение от Jupiter Посмотреть сообщение
кто видел этот хедер кроме вас?
вы же его засекретили, а нам шоу экстрасенсов устраиваете?
прошу прощения=)
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
class CMyTime
{
public:
    //CMyTime();
    CMyTime(unsigned hours, unsigned minutes, unsigned seconds = 0); 
    CMyTime(unsigned timeStamp = 0);
 // инициализирует время количеством секунд после полуночи 
    ~CMyTime(void);
 
    CMyTime const operator +(CMyTime const& time) const;
    CMyTime const operator -(CMyTime const& time) const;
    CMyTime const operator ++(CMyTime& time);
    CMyTime const operator -(CMyTime const& vector) const;
    CMyTime& operator +=(CMyTime const& vector);
    CMyTime& operator -=(CMyTime const& vector);
    CMyTime const operator *(double scalar) const;
    CMyTime const operator /(double scalar) const;
    CMyTime& operator *=(double scalar);
    CMyTime& operator /=(double scalar);
    bool operator == (CMyTime const& vector) const;
    bool operator != (CMyTime const& vector) const;
    
unsigned int GetSecondsAfterMidnight();
 
 
    unsigned int secondAfterMidnight;
};
Добавлено через 43 минуты
всем спасибо вопрос закрыт, разобрался сам.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2013, 20:44
Привет! Вот еще темы с ответами:

Перегрузка оператора += - C++
У меня имеется структура и метод, который вызывается след образом: A.plus_and_minus(B); Есть огромное желание перегрузить функцию += ,...

Перегрузка оператора - - C++
В своём классе я перегрузил оператор -,но в функции,использующей вычитание возникает ошибка error C2678: бинарный &quot;-&quot;: не найден...

Перегрузка оператора + - C++
Не могу заставить работать перегруженный оператор + в функции CMoveByVector Point.h: #define POINT_H #include &lt;iostream&gt; ...

Перегрузка оператора + и = - C++
Здравствуйте! Возникла проблема при реализации кода перегрузки операторов. BigInt - это просто класс характеризующий огромные числа в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.11.2013, 20:44
Ответ Создать тему
Опции темы

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