Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
6 / 6 / 0
Регистрация: 06.10.2010
Сообщений: 122

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

24.10.2011, 22:36. Показов 1636. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый вечер. Прошу помочь разобраться. Задание - Для определения даты поставки строительных материалов необходимо перегрузить операцию вычисления даты через определенное количество дней. Для этого перегрузите операции «дата» + «int», «int» + «дата» (две последние операции различны, перестановка операторов транслятором не производится).
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
36
37
#include<iostream>
#include<conio.h>
using namespace std;
const int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
class Date
{
    int day,month,year;
    public:
    Date(){}
    Date(int d,int m,int y){day=d;month=m;year=y;}
    ~Date(){}
    friend ostream& operator<<(ostream&,Date&);
    Date& operator+(Date&ob);
};
 
 
ostream& operator<<(ostream& cout_,Date& ob)
{
    cout_<<ob.day<<"."<<ob.month<<"."<<ob.year;
    return cout_;
}
//как правильно перегрузить?
Date& Date::operator+(Date& ob)
{
    Date temp;
    int x;
    temp.day=ob.day+x;
    return temp;
}
 
void main()
{
    int x=1;
    Date ob(1,2,2010);
    ob=ob+x;
    getch();
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.10.2011, 22:36
Ответы с готовыми решениями:

Перегрузка оператора []
Всем привет! Как можно перегрузить оператор так, чтобы к нему можно было обращаться так: class_arr = 5; Где class_arr - переменная...

Перегрузка оператора ==
нужно сравнить 1) объект класса abc с объектом класса abc1 2) объект класса abc с другим объектом класса abc 3) объект класса abc1...

Перегрузка оператора +
String String::operator + (String &amp; sg2) { String tmp; tmp.str = new char ; strcpy (tmp.str, str); strcat (tmp.str, sg2.str);...

10
 Аватар для cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
24.10.2011, 22:40
Попробуйте создать указатель на объект temp и его же из функции вернуть.
0
Студент
 Аватар для amor1k
148 / 148 / 64
Регистрация: 18.01.2011
Сообщений: 469
24.10.2011, 22:43
C++
1
2
int x;
temp.day=ob.day+x;
а значение 'х' известно?
0
6 / 6 / 0
Регистрация: 06.10.2010
Сообщений: 122
24.10.2011, 22:45  [ТС]
Цитата Сообщение от cetrael Посмотреть сообщение
Попробуйте создать указатель на объект temp и его же из функции вернуть.
если не сложно, напишите фрагмент кода, я в си++ новичок, не обессудьте)
0
Студент
 Аватар для amor1k
148 / 148 / 64
Регистрация: 18.01.2011
Сообщений: 469
24.10.2011, 22:45
тогда может нужно так?
C++
1
Date& Date::operator+(Date& ob, int x)
и

C++
1
Date& Date::operator+(int x, Date& ob)
1
6 / 6 / 0
Регистрация: 06.10.2010
Сообщений: 122
24.10.2011, 22:46  [ТС]
Цитата Сообщение от amor1k Посмотреть сообщение
C++
1
2
int x;
temp.day=ob.day+x;
а значение 'х' известно?
может быть любым, я делал
C++
1
2
3
Date temp;
    int x=3;
    temp.day=ob.day+x;
все равно ошибка

Добавлено через 23 секунды
сейчас попробую
0
Студент
 Аватар для amor1k
148 / 148 / 64
Регистрация: 18.01.2011
Сообщений: 469
24.10.2011, 22:48
я точно не помню, давно этим не занимался=)
C++
1
2
3
4
5
6
7
8
9
10
11
12
Date& Date::operator+(Date& ob, int x)
{
        Date temp;
        temp.day=ob.day+x;
        return temp;
}
Date& Date::operator+(int x, Date& ob)
{
        Date temp;
        temp.day=x + ob.day;
        return temp;
}
Добавлено через 58 секунд
то есть пробуйте
C++
1
Day = Day + int
и наоборот
1
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
24.10.2011, 22:51
перегрузи используя дружественные функции
форма такая:
C++
1
2
3
4
5
friend Date operator+(Date left, int right) {
 
тут тело
 
}
2ая функция такая же, только параметры нужно поменять местами.
тело функции в целом верное. нет проверки на дату. ну это дело последнее (для вас).
и да.
возвращать ссылку в данном случае категорически неверно...
обратите внимание на это.

amor1k, не, у вас в методе (оператор+) будет попытка передать 3 параметра. так низя.
1
6 / 6 / 0
Регистрация: 06.10.2010
Сообщений: 122
24.10.2011, 22:57  [ТС]
OstapBender, спасибо огромное! Все работает. Проверку на дату знаю как писать. На счет возврата ссылки, нельзя возвращать ссылку только используя дружественную функцию, или при перегрузки операторов вообще?
0
Студент
 Аватар для amor1k
148 / 148 / 64
Регистрация: 18.01.2011
Сообщений: 469
24.10.2011, 22:58
OstapBender, объясните пожалуйста, почему 3? Я в перегрузке всегда был слаб
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
24.10.2011, 23:00
pun4er, просто нельзя возвращать ссылки и указатели на локальные переменные... они уничтожаются после выполнения функции.

amor1k, очень просто. в каждый метод 1-м параметром всегда неявно передаётся тот самый this. так что количество параметров +1 для любого метода.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.10.2011, 23:00
Помогаю со студенческими работами здесь

Перегрузка оператора []
Здравствуйте. Пробую перегрузить оператор . template &lt;class Element&gt; class List { public: struct Node { Element el; ...

Перегрузка оператора
Доброго времени суток. Столкнулся с проблемой перегрузки оператора &quot;++&quot; выдает ошибку в первой строке: postfix ‘const Counter...

Перегрузка оператора +
Добрый день, товарищи программиста. Вопрос такой. Я перезагружаю оператор + на языку с++, и написал класс и метод class Complex ...

Перегрузка оператора ()
кто может подсказать как создать перегрузку что бы можно было работать с амссивввом в таком ввиде mass(3)=2 а не mass=2; если можно...

Перегрузка оператора -=
Добрый день, товарищи программиста. Вопрос такой. у перезагружаю оператор -= на языку с++, и написал класс и метод const double...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru