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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
Pokemon_93
 Аватар для Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
30.11.2013, 19:41     перегрузка постфиксной и префиксной формы оператора ++ #1
доброго времени суток форумчане,
у меня такой вопрос, как перегрузить оператор ++
все другие операторы уже перегрузил осталась проблема только с этими двумя=(
пишу
C++
1
CMyTime const operator ++(CMyTime& time);
слово operator подчеркивает красным и все, не могу понять в чем дело
такой метод перегрузки был описан на хабре, но он не работает у меня почему то.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 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++;
}
но делать перегрузку операций инкремента внешними функциями плохая практика так как при следовании принципу наименьшего удивления операторы инкремента должны менять состояние объекта.
все что меняет состояние объекта лучше делать членом класса.
Oberyn Martell
5 / 5 / 0
Регистрация: 15.05.2013
Сообщений: 36
30.11.2013, 19:51     перегрузка постфиксной и префиксной формы оператора ++ #3
Унарная функция-операция, определяемая внутри класса, должна быть представлена с помощью нестатического метода без параметров. Если функция определяется вне класса, она должна иметь один параметр типа класса.

Операции постфиксного инкремента и декремента должны иметь первый параметр типа int. Он используется только для того, чтобы отличить их от префиксной формы.
Pokemon_93
 Аватар для 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;   
}
но проблема в том что он еще в хедере подчеркивает слово оператор
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:
}
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.11.2013, 19:59     перегрузка постфиксной и префиксной формы оператора ++ #6
Цитата Сообщение от Pokemon_93 Посмотреть сообщение
но проблема в том что он еще в хедере подчеркивает слово оператор
кто видел этот хедер кроме вас?
вы же его засекретили, а нам шоу экстрасенсов устраиваете?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2013, 20:44     перегрузка постфиксной и префиксной формы оператора ++
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Pokemon_93
 Аватар для 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 минуты
всем спасибо вопрос закрыт, разобрался сам.
Yandex
Объявления
30.11.2013, 20:44     перегрузка постфиксной и префиксной формы оператора ++
Ответ Создать тему
Опции темы

Текущее время: 01:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru