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

Реализовать перегрузку операторов для нахождения разности двух дат и увеличения даты на определенное количество дней

18.09.2018, 19:32. Показов 8386. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача в том что бы создайте класс Date, который будет содержать информацию о дате (день, месяц, год). С помощью механизма перегрузки операторов, определите операцию разности двух дат (результат в виде количества дней между датами), а также операцию увеличения даты на определенное количество дней

Код:
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
38
39
#pragma once
#include <iostream>
 
class Date
{
 
private:
    int day;
    int month;
    int year;
 
public:
 
    Date() {}
 
    Date(int day, int month, int year) {
 
        this->day = day;
        this->month = month;
        this->year = year;
    }
 
    int getday() { return day; }
    void setday(int day) { this->day = day; }
 
    int getmonth() { return month; }
    void setmonth(int month) { this->month = month; }
 
    int getyear() { return year; }
    void setyear(int year) { this->year = year; }
 
    Date operator+(const Date &obj) {
 
        Date d;
        
 
    }
 
};
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.09.2018, 19:32
Ответы с готовыми решениями:

Изменение даты на определённое количество дней
Помогите написать метод изменения даты на заданное количество дней. Вот пример кода. using System; using...

Реализовать перегрузку операторов << и >> для вывода вектора в поток
Дана программа: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;iostream&gt; using namespace std; template &lt;class T&gt; ...

Реализовать перегрузку заданных операторов для пользовательского класса комплексных чисел
Нужно добавить операторы перегрузки для комплексных чисел, но я что-то вообще не догоняю как это сделать. На пикче полное задание. я...

7
115 / 83 / 43
Регистрация: 19.01.2018
Сообщений: 484
18.09.2018, 19:40
Jeka33333333333, а в чем проблема?
0
0 / 0 / 0
Регистрация: 17.09.2018
Сообщений: 32
18.09.2018, 19:41  [ТС]
Нужно дописать код а я не знаю что дальше делать
0
115 / 83 / 43
Регистрация: 19.01.2018
Сообщений: 484
18.09.2018, 19:48
Лучший ответ Сообщение было отмечено Kastaneda как решение

Решение

Jeka33333333333, Спиз... взял у Kastaneda
Кликните здесь для просмотра всего текста
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <iostream>
class Date{
private:
    bool leapyear;
    int day;
    int month;
    int year;
    bool leap(int)const;
    int maxday()const;
public:
    Date(int d,int m,int y):leapyear(leap(y)),day(d),month(m),year(y){};
    Date& operator+=(int);
    Date& operator-=(int);
    std::string operator-(Date&)const;
    bool operator==(Date&)const;
    friend std::ostream& operator<<(std::ostream&, const Date&);
};
bool Date::leap(int y)const{ 
    return ((y % 4 == 0 && y% 100 != 0) || y % 400);
}
int Date::maxday()const{
    int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(leapyear)days[1]=29;
    return days[month-1];
}
Date& Date::operator+=(int d){
    if(day+d>maxday()){
        d-=maxday()-day;
        if(++month>12){
            month=1;
            year++;
        }
        while(d/maxday()){
            if(++month>12){
                month=1;
                year++;
            }
            d-=maxday();
        }
        day=d;
    }
    else day+=d;
    return *this;
}
Date& Date::operator-=(int d){
    if(day-d<1){
        d-=day;
        if(--month==0){
            month=12;
            year--;
        }
        while(d/maxday()){
            d-=maxday();
            if(--month==0){
                month=12;
                year--;
            }
        }
        day=maxday()-d;
    }
    else day-=d;
    return *this;
}
#include <sstream> //stringstream       
std::string Date::operator-(Date &dt)const{
    int d,m,y;
    if(year>=dt.year){
        y=year-dt.year;
        if(month>dt.month){
            m=month-dt.month;
            d=day+dt.maxday()-dt.day;
            if(d>dt.maxday())d-=dt.maxday();
            else --m;
            --y;
        }
        else {
            m=12-month+dt.month;
            d=dt.day+maxday()-day;
            if(d>maxday())d-=maxday();
            else --m;
        }
    }
    else {
        y=dt.year-year;
        if(month>dt.month){
            m=12-month+dt.month;
            d=day+dt.maxday()-dt.day;
            if(d>dt.maxday())d-=dt.maxday();
            else --m;
            --y;
        }
        else {
            m=dt.month-month;
            d=maxday()-day+dt.day;
            if(d>maxday())d-=maxday();
            else --m;
        }
    }
    std::string s;
    std::stringstream ss;
    ss<<d<<" days "<<m<<" month "<<y<<" years";
    getline(ss,s);
    return s;
}
 
    
int main(){
    int d,m,y,reduce,increase;
    std::cout<<"Enter first date (day month year): ";
    std::cin>>d>>m>>y;
    Date date(d,m,y);
    std::cout<<"Date = "<<date<<std::endl;
    std::cout<<"reduce  date by : ";//уменьшить дату на столько то дней
    std::cin>>reduce;
    date-=reduce;
    std::cout<<"Date = "<<date<<std::endl;
    std::cout<<"Increase date by : ";//увеличить дату 
    std::cin>>increase;
    date+=increase;
    std::cout<<"Date = "<<date<<std::endl;
    std::cout<<"Enter second date (day month year): ";
    std::cin>>d>>m>>y;
    Date date2(d,m,y);
    std::cout<<"Date2 = "<<date2<<std::endl;
    std::cout<<"Dates are "<<(date==date2 ? "equal":"not equal")<<std::endl;
    std::cout<<"Date1 - Date2 = "<<date-date2<<std::endl;
    return 0;
}
0
0 / 0 / 0
Регистрация: 17.09.2018
Сообщений: 32
18.09.2018, 20:05  [ТС]
Не работает
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
19.09.2018, 06:37
Цитата Сообщение от Jeka33333333333 Посмотреть сообщение
Не работает
У всех работает, у тебя не работает. Похоже ты даже рабочий код запустить не можешь.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
19.09.2018, 11:16
Kastaneda, но ведь там и правда не хватает реализаций operator<< и operator==
А все почему, потому что лучше ссылку давать, а не копипастить - при копипасте две функции потерялись:
C++
1
2
3
4
5
6
7
8
9
bool Date::operator==(Date& dt)const{
    return day==dt.day && month==dt.month && year==dt.year;
}
 
std::ostream& operator<<(std::ostream &os, const Date &dt){
    std::string m[]={"January","February","March","April","May","June","July","August","September","October","November","December"};
    os<<dt.day<<" "<<m[dt.month-1]<<" "<<dt.year;
    return os;
}
Но автор, конечно, тоже хорош: "не работает" говорит. А что там не работает все догадаться должны? Ошибки копиляции привести, рассказать как делал, нет? Никакой культуры.

Ссылка на оригинал:
https://www.cyberforum.ru/post1659691.html
1
19.09.2018, 12:28

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Ссылка на оригинал:
https://www.cyberforum.ru/post1659691.html
Надо будет как-нибудь собраться и переписать это дело, 7 лет прошло с его написания, как минимум код форматировать научился)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.09.2018, 12:28
Помогаю со студенческими работами здесь

Получить количество дней в интервале двух дат
Допустим: Дата заезда в номер = 23.11.2012 формат date, вводится с textboxa Дата выезда из номера = 25.11.2012 аналогично все вводится...

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

Реализовать перегрузку операторов
Есть две матрицы, необходимо реализовать перегрузку операторов. вообще не могу понять как тут это сделать, помогите!

Как реализовать перегрузку операторов?
Векторы: полярные координаты (длина и угол), конструктор по умолчанию, конструктор с параметрами, конструктор копирования, метод поворота...

Не получается реализовать перегрузку операторов
Начал изучать С++, пытаюсь перегрузить оператор, чет не очень получается, в чем ощибка? class Sequence { public: int elem(int num)...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru