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

Как расставить правильно шаблоны класса в готовый код - C++

Восстановить пароль Регистрация
 
kazakovtsev
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 24
10.06.2013, 14:41     Как расставить правильно шаблоны класса в готовый код #1
У меня есть готовый код, он полностью работает, писался для задачи на класс календарных дат. В 3 файлах: main.cpp , myclass.cpp , myclass.h
Теперь препод говорит, что надо добавить шаблоны классов. А я не знаю, как и куда их добавлять. Пытался - запорол весь код, ничего не работало. Лучше подскажите мне вы, знающие люди.

Файл myclass.h
C++ (Qt)
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
#include<stdio.h>
#include<iostream.h>
#include<iomanip.h>
class data
{
 private:
int day, month, year;
 
 public:
  bool check();
 
  static int type;
  data(int d=1, int m=1, int y=2001);
  friend ostream& operator<<(ostream& out,data &c);
  friend istream& operator>>(istream& in, data &c);
  friend bool operator == (const data&, const data &);
  friend int operator - (const data&, const data &);
  friend bool operator < (const data&, const data &);
  int DateToDays();
  data DaysToDate(int);
  void increase(int);
  void decrease(int);
};
 
ostream& operator << (ostream& out,data &c)
{
        switch (c.type)
        {
            case 1:return out<<setw(2)<<setfill('0')<<c.day<<'/'
                    <<setw(2)<<setfill('0')<<c.month<<'/'
                    <<setw(4)<<setfill('0')<<c.year;   break;
            case 2:return out<<setw(2)<<setfill('0')<<c.month<<'/'
                    <<setw(2)<<setfill('0')<<c.day<<'/'
                    <<setw(4)<<setfill('0')<<c.year;  break;
            case 3:cout<<setw(2)<<setfill('0')<<c.day<<'-';
                switch (c.month)
                {
                    case 1:cout<<"JAN-";break;
                    case 2:cout<<"FEB-";break;
                    case 3:cout<<"MAR-";break;
                    case 4:cout<<"APR-";break;
                    case 5:cout<<"MAY-";break;
                    case 6:cout<<"JUN-";break;
                    case 7:cout<<"JUL-";break;
                    case 8:cout<<"AUG-";break;
                    case 9:cout<<"SEP-";break;
                    case 10:cout<<"OCT-";break;
                    case 11:cout<<"NOV-";break;
                    case 12:cout<<"DEC-";break;
                }
                return out << setw(4) << setfill('0') << c.year;
        }
}
 
istream& operator >> (istream& in, data &c)
{
 
 char str[100],*tPtr;
 
 
in.getline(str,100,'\n');
 
    switch (c.type)
    {
        case 1:
     tPtr=strtok(str,".");
     c.day=atoi(tPtr);
 
     tPtr = strtok(NULL,".");
     c.month=atoi(tPtr);
 
     tPtr = strtok(NULL,".");
     c.year=atoi(tPtr);
    break;
        case 2:
   tPtr=strtok(str,"/");
     c.month=atoi(tPtr);
 
     tPtr = strtok(NULL,"/");
     c.day=atoi(tPtr);
 
     tPtr = strtok(NULL,"/");
     c.year=atoi(tPtr);
    break;
        case 3:
   tPtr=strtok(str,"-");
     c.day=atoi(tPtr);
 
     tPtr = strtok(NULL,"-");
     c.month=atoi(tPtr);
 
     tPtr = strtok(NULL,"-");
     c.year=atoi(tPtr);
    break;
    }
 
     return in;
 
 
 
}

Файл myclass.cpp
C++ (Qt)
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include "myclass.h"
 
 int mDays[12]={31,28,31,30,31,30,31,31,30,31,30,31};
 
data::data(int d, int m, int y)
{
    month = m;
    if (m > 12)
    {
        while (m > 12)
        {
            cout << "Input month <= 12! \n" << "Month: ";
 
            cin >> m;
        }
        month = m;
     }
     if ((m == 1) || (m == 3) || (m == 5) || (m == 7) || (m == 8) || (m == 10) || (m == 12))
     {
        while (d > 31)
        {
            cout << "Input day <= 31! \n" << "Day: ";
            cin >> d;
        }
        day = d;            
     }
     if ((m == 4) || (m == 6) || (m == 9) || (m == 11))
     {
        while (d > 30)
        {
            cout << "Input day <= 30! \n" << "Day: ";
            cin >> d;
        }
        day = d;
     }
 
     if ((y%4==0 && y%100!=0)&& m==2)
     {
        while (d > 29)
        {
            cout << "Input day <= 29! \n" << "Day: ";
            cin >> d;
        }
        day = d;   
     }
 
     if ((y%4!=0 && y%100==0)&& m==2)
     {
        while (d > 28)
        {
            cout << "Input day <= 28! \n" << "Day: ";
            cin >> d;
        } 
        day = d;         
     } 
     year = y;
 
 
  }
 
 
 
  bool operator == (const data& A,const data& B)
{
    if (A.day==B.day && A.month==B.month && A.year==B.year) return true;
    return false;
}
 
bool operator < (const data& A, const data& B)
{
if (A.year<B.year || (A.year==B.year && A.month<B.month) || (A.year==B.year && A.month==B.month && A.day<B.day))
return true;
 else return false;
}
 
 
 
int data::DateToDays()
{
int tmp = month<=2 && ((year%4==0 && year%100!=0) || year%400==0) ? 1 : 0;
//расчет дней для заданного года с учетом високосных лет
  int days = (year/4)-(year/100)+(year/400) + year*365 - tmp;
 
  //расчет дней в месяцах заданного года
  for(int i=0; i<month-1; i++)
    days+=mDays[i];
 
  //добавление дней последнего месяца
  days+=day;
  return days;
}
 
data data::DaysToDate(int days)
{
  int d=1, m=1, y=0, exception=28;
 
  while ( days > mDays[m-1] ) {
    //определение високосного года
    if ( (y%4==0 && y%100!=0) || y%400==0 ) exception=29;
    else exception=28;
 
    while (m!=13 && days > mDays[m-1]) {
      if (m!=2)  //учет високосного года
        days -= mDays[m-1];
      else
        days -= exception;
 
      m++;
    }
    if(m==13) m=1;
    if(days > mDays[m-1])y++;
  }
   //определение числа месяца из оставшихся дней
  d+=days;
 
  data newDate(d,m,y);
 
  return newDate;
}
 
 
void data::increase(int dt)
{
data incDate;
incDate= DaysToDate(DateToDays() + dt );
this->day=incDate.day;
this->month=incDate.month;
this->year=incDate.year;
}
 
void data::decrease(int dt)
{
data DecDate;
DecDate= DaysToDate(DateToDays() - dt );
this->day=DecDate.day;
this->month=DecDate.month;
this->year=DecDate.year;
}
 
 
int operator - (const data& F, const data& G)
{
  int dd=G.DateToDays()-F.DateToDays();
  return dd>0 ? dd : -dd;
}
 
 
 bool data::check()
{
if(!(year%4==0 && year%100!=0))   {
    if (month==2 && day==29) return true;
    else return false;           }
}
Файл main.cpp
C++ (Qt)
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
//---------------------------------------------------------------------------
#include "myclass.h"
#pragma hdrstop
#include "iostream.h"
//---------------------------------------------------------------------------
 
#pragma argsused
int data::type;
int main(int argc, char* argv[])
{
    int day, month, year;
    cout << "Please make a choose the format of data: \n";
    cout << "1: DD.MM.YYYY \n2: MM/DD/YYYY \n3: DD-mon-YYYY \n";
    cin>>data::type;
 
    cout << "Input day, month and year of 1st date: ";
    cin >> day >> month >> year;
    data u(day, month, year);
 
    cout << u;
 
    cout << "\nInput day, month and year of 2nd date: ";
    cin >> day >> month >> year;
    cin.get();
    data r(day, month, year);
    cout << r;
 
 
    if (u == r) cout << "\nDates are equal";
    else cout << "\nDates aren't equal";
    char str[25];
 
   cout << "\nInput first date: ";
    cin>>u;
    while (u.check()==true) {
    cout<<"\nIncorrect Date, re-enter date: ";
    cin>>r;
    }
    cout<<u;
 
 
   cout << "\nInput second date: ";
    cin>>r;
    while (r.check()==true) {
    cout<<"\nIncorrect Date, re-enter date: ";
    cin>>r;
    }
    cout<<r;
    int v=u - r;
    cout << "\nBetween two dates ";
    cout << v <<" days ";
    bool x=u < r;
    if (x==1)  cout << "\n1-st date < 2-nd date\n" << endl;
        else cout << "\n1-st date > 2-nd date\n" << endl;
 
 
 
    int n;
    cout<<"\nEnter inc/dec  dt: ";
    cin>>n;
    cout<<"\nIncrease 1-st Date (+"<<n<<" days) - ";
    u.increase(n);
    cout<<u;
 
    cout<<"\nDecrease 2-nd Date (-"<<n<<" days) - ";
    r.decrease(n);
    cout<<r;
 
    int l,m;
   l=u.DateToDays();      
   m=r.DateToDays();
         cout <<endl<< l;     //проверка ф-ии DateToDays
          cout << "\n"<<m;
     getchar();
    getchar(); getchar();
    return 0;
}
//---------------------------------------------------------------------------
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2013, 14:41     Как расставить правильно шаблоны класса в готовый код
Посмотрите здесь:

C++ Как правильно записать наследника от такого класса?
Готовый код.Подскажите,как ограничить ввод строки. C++
Готовый код.Как перестроить структуру под класс.wxDex-C++ C++
C++ Есть готовый код C++ (Code Composer Studio). Копирование матрицы. Как исправить ошибки?
как написать готовый код паскаль на с++? C++
Шаблоны функций как исправить код? C++
C++ Как правильно использовать классы? Как вывести значение класса на экран?
Шаблоны методов класса C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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