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

Класс «Дата» - поля данных и перегруженные операции - C++

Восстановить пароль Регистрация
 
Lewis_Husk
 Аватар для Lewis_Husk
0 / 0 / 0
Регистрация: 28.03.2012
Сообщений: 13
28.03.2012, 10:00     Класс «Дата» - поля данных и перегруженные операции #1
Привет! ребят помогите с заданием:" Класс «Дата» должен включать поля данных: день, месяц, год; методы: вывод даты и времени года и перегруженные операции: добавление (+) к дате целого числа (количества дней), сравнение двух дат (< , >). "
не могу сделать сравнение дат.
нароботка:

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
129
130
131
132
133
134
#include <conio.h>
#include <string.h>
#include <iostream>
using namespace std;
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);
        string operator-(Date&)const;
        bool operator==(Date&)const;
        friend ostream& operator<<(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>            
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;
                }
        }
        string s;
        stringstream ss;
        ss<<d<<" days "<<m<<" month "<<y<<" years";
        getline(ss,s);
        return s;
}
bool Date::operator==(Date& dt)const{
        return day==dt.day && month==dt.month && year==dt.year;
}
ostream& operator<<(ostream &os, const Date &dt){
        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;
}       
        
int main(){
        int d,m,y,reduce;
        cout<<"Введите первую дату (день месяц год): ";
        cin>>d>>m>>y;
        Date date(d,m,y);
        cout<<"Дата = "<<date<<endl;
        cout<<"Увеличить на дней : ";//уменьшить дату на столько то дней
        cin>>reduce;
        date+=reduce;
        cout<<"Дата = "<<date<<endl;
        cout<<"Введите вторую дату (день месяц год): ";
        cin>>d>>m>>y;
        Date date2(d,m,y);
        cout<<"Дата 2 = "<<date2<<endl;
        
        if(date==date2)cout<<"даты равны";
        return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2012, 10:00     Класс «Дата» - поля данных и перегруженные операции
Посмотрите здесь:

Создать класс, содержащий поля, которые можно использовать для хранения данных C++
Создать класс Date – дата, содержащая поля: день, месяц, год. C++
C++ Создать класс Triangle для представления треугольника. Поля данных должны включать углы и стороны.
C++ класс дата
C++ Перегруженные операции
C++ Написать программу на языке С + + реализующая класс содержащий поля данных и методы ввода и вывода данных
Дата класс C++
Класс вектор с арифметическими операциями, перегруженные операторы C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.03.2012, 10:02     Класс «Дата» - поля данных и перегруженные операции #2
Lewis_Husk, А где ваши попытки сделать перегрузку < ? Наработки покажите, и мы поправим.
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
28.03.2012, 11:02     Класс «Дата» - поля данных и перегруженные операции #3
C++
1
2
3
bool Date::operator==(Date& dt)const{
        return day==dt.day && month==dt.month && year==dt.year;
}
равно реализовали, теперь больше или меньше догадаетесь как сделать? поменять знак равно на больше и меньше соответственно
Yandex
Объявления
28.03.2012, 11:02     Класс «Дата» - поля данных и перегруженные операции
Ответ Создать тему
Опции темы

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