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

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

24.10.2011, 22:36. Показов 1608. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru