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

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

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

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

24.10.2011, 22:36. Просмотров 804. Ответов 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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2011, 22:36     Перегрузка оператора +
Посмотрите здесь:

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

Перегрузка оператора < - C++
У меня 2 файла . Przedzial.h и Przedzial.cpp В первом только класс и названия метод и т.д. Во втором описание. Przedzial.h ...

Перегрузка оператора << - C++
Как вот в таком классе перегрузить оператор &lt;&lt;? #ifndef MATRIXX_H #define MATRIXX_H #include &lt;iostream&gt; using namespace...

Перегрузка оператора = - C++
помогите создать перегруженный оператор = в классе Х, который будет копировать содержание строки S1 в S2.

Перегрузка оператора [] - C++
Что не правильно я перегрузил? #include &lt;iostream&gt; #include &lt;locale.h&gt; using namespace std; struct S_List { char c; S_List...

Перегрузка оператора - - C++
Стою я на асфальте в лыжи обутый... В чём проблема, задача перегрузить операторы, всё, что я проверял работает исправно, кроме минуса,...

Перегрузка оператора * - C++
Операция произведения применяется к объекту квадрат, при этом изменяются координаты центры фигуры. Результатом произведения является...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
583 / 521 / 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++
Есть: class any{ char arr }

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

Перегрузка оператора ++ - C++
выводит не то значение привет. нужна Ваша подсказка. листинг из учебника: (тема: перегрузка оператора ++) #include &lt;iostream&gt; ...

Перегрузка оператора += - C++
реализую класс собственных строк называеться MyString вылетает при использовании оператора += самое интересное что если дебажишь код по...

Перегрузка оператора - C++
Имеется код: #include &lt;iostream&gt; class X { public: int a; int b; int operator+(int a) {


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

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

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

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