Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/55: Рейтинг темы: голосов - 55, средняя оценка - 4.75
 Аватар для Pokemon_93
9 / 5 / 0
Регистрация: 19.01.2013
Сообщений: 74

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

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

Студворк — интернет-сервис помощи студентам
доброго времени суток форумчане,
у меня такой вопрос, как перегрузить оператор ++
все другие операторы уже перегрузил осталась проблема только с этими двумя=(
пишу
C++
1
CMyTime const operator ++(CMyTime& time);
слово operator подчеркивает красным и все, не могу понять в чем дело
такой метод перегрузки был описан на хабре, но он не работает у меня почему то.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.11.2013, 19:41
Ответы с готовыми решениями:

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

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

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

6
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
30.11.2013, 19:49
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
5 / 5 / 0
Регистрация: 15.05.2013
Сообщений: 36
30.11.2013, 19:51
Унарная функция-операция, определяемая внутри класса, должна быть представлена с помощью нестатического метода без параметров. Если функция определяется вне класса, она должна иметь один параметр типа класса.

Операции постфиксного инкремента и декремента должны иметь первый параметр типа int. Он используется только для того, чтобы отличить их от префиксной формы.
0
 Аватар для Pokemon_93
9 / 5 / 0
Регистрация: 19.01.2013
Сообщений: 74
30.11.2013, 19:53  [ТС]
Цитата Сообщение от 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
5 / 5 / 0
Регистрация: 15.05.2013
Сообщений: 36
30.11.2013, 19:59
Попробуйте так:
C++
1
2
3
4
CMyTime & operator ++() {
   time.seconds++;
   return *this:
}
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
30.11.2013, 19:59
Цитата Сообщение от Pokemon_93 Посмотреть сообщение
но проблема в том что он еще в хедере подчеркивает слово оператор
кто видел этот хедер кроме вас?
вы же его засекретили, а нам шоу экстрасенсов устраиваете?
0
 Аватар для Pokemon_93
9 / 5 / 0
Регистрация: 19.01.2013
Сообщений: 74
30.11.2013, 20:44  [ТС]
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.11.2013, 20:44
Помогаю со студенческими работами здесь

Отличие постфиксной и префиксной формы декрементирования при работе с массивами
Здравствуйте. Есть код, который работает(префиксная форма): #include &lt;stdio.h&gt; int main(void){ int mas;

Написать программу, преобразующую строку в префиксной форме в строку в постфиксной форме
Помоги пожалуйста объяснить, что и как надо сделать в моей задаче: написать программу, преобразующую строку в префиксной форме в строку в...

Перевод формулы из префиксной формы в инфиксную
Надо перевести формулу из префиксной формы записи в инфиксную т.е. дано на входе -+*abz*cz сделать (a+b)*z-c*z, вроде делается через...

Перевод префиксной формы записи в постфиксную
Помогите пожалуйста написать алгоритм перевода из префиксной формы записи в постфиксную(минуя инфиксную). В сети таких алгоритмов не...

Преобразование формы записи выражения из префиксной в постфиксную
Требуеться написать программу на языке Prolog &quot;Преобразование формы записи выражения из префиксной в постфиксную&quot;. Очень срочно...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru