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

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

Войти
Регистрация
Восстановить пароль
 
pun4er
6 / 6 / 1
Регистрация: 06.10.2010
Сообщений: 122
#1

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

24.10.2011, 22:36. Просмотров 796. Ответов 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();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
24.10.2011, 22:40     Перегрузка оператора + #2
Попробуйте создать указатель на объект temp и его же из функции вернуть.
amor1k
Студент
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
24.10.2011, 22:43     Перегрузка оператора + #3
C++
1
2
int x;
temp.day=ob.day+x;
а значение 'х' известно?
pun4er
6 / 6 / 1
Регистрация: 06.10.2010
Сообщений: 122
24.10.2011, 22:45  [ТС]     Перегрузка оператора + #4
Цитата Сообщение от cetrael Посмотреть сообщение
Попробуйте создать указатель на объект temp и его же из функции вернуть.
если не сложно, напишите фрагмент кода, я в си++ новичок, не обессудьте)
amor1k
Студент
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
24.10.2011, 22:45     Перегрузка оператора + #5
тогда может нужно так?
C++
1
Date& Date::operator+(Date& ob, int x)
и

C++
1
Date& Date::operator+(int x, Date& ob)
pun4er
6 / 6 / 1
Регистрация: 06.10.2010
Сообщений: 122
24.10.2011, 22:46  [ТС]     Перегрузка оператора + #6
Цитата Сообщение от 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 секунды
сейчас попробую
amor1k
Студент
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
24.10.2011, 22:48     Перегрузка оператора + #7
я точно не помню, давно этим не занимался=)
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
и наоборот
OstapBender
582 / 520 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
24.10.2011, 22:51     Перегрузка оператора + #8
перегрузи используя дружественные функции
форма такая:
C++
1
2
3
4
5
friend Date operator+(Date left, int right) {
 
тут тело
 
}
2ая функция такая же, только параметры нужно поменять местами.
тело функции в целом верное. нет проверки на дату. ну это дело последнее (для вас).
и да.
возвращать ссылку в данном случае категорически неверно...
обратите внимание на это.

amor1k, не, у вас в методе (оператор+) будет попытка передать 3 параметра. так низя.
pun4er
6 / 6 / 1
Регистрация: 06.10.2010
Сообщений: 122
24.10.2011, 22:57  [ТС]     Перегрузка оператора + #9
OstapBender, спасибо огромное! Все работает. Проверку на дату знаю как писать. На счет возврата ссылки, нельзя возвращать ссылку только используя дружественную функцию, или при перегрузки операторов вообще?
amor1k
Студент
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
24.10.2011, 22:58     Перегрузка оператора + #10
OstapBender, объясните пожалуйста, почему 3? Я в перегрузке всегда был слаб
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2011, 23:00     Перегрузка оператора +
Еще ссылки по теме:

Перегрузка оператора [] C++
Перегрузка оператора -- C++
Перегрузка оператора + C++
Перегрузка оператора << C++
C++ Перегрузка оператора <=

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

Или воспользуйтесь поиском по форуму:
OstapBender
582 / 520 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
24.10.2011, 23:00     Перегрузка оператора + #11
pun4er, просто нельзя возвращать ссылки и указатели на локальные переменные... они уничтожаются после выполнения функции.

amor1k, очень просто. в каждый метод 1-м параметром всегда неявно передаётся тот самый this. так что количество параметров +1 для любого метода.
Yandex
Объявления
24.10.2011, 23:00     Перегрузка оператора +
Ответ Создать тему
Опции темы

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