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

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

Восстановить пароль Регистрация
 
pun4er
6 / 6 / 1
Регистрация: 06.10.2010
Сообщений: 122
24.10.2011, 22:36     Перегрузка оператора + #1
Всем добрый вечер. Прошу помочь разобраться. Задание - Для определения даты поставки строительных материалов необходимо перегрузить операцию вычисления даты через определенное количество дней. Для этого перегрузите операции «дата» + «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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2011, 22:36     Перегрузка оператора +
Посмотрите здесь:

C++ Перегрузка оператора ()
C++ Перегрузка оператора []
C++ Перегрузка оператора ->
Перегрузка оператора = C++
перегрузка оператора () C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cetrael
 Аватар для cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
24.10.2011, 22:40     Перегрузка оператора + #2
Попробуйте создать указатель на объект temp и его же из функции вернуть.
amor1k
Студент
 Аватар для 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
Студент
 Аватар для 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
Студент
 Аватар для 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
 Аватар для OstapBender
581 / 519 / 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
Студент
 Аватар для 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++ Перегрузка оператора <<

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

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

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

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