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

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

Войти
Регистрация
Восстановить пароль
 
выручайте 23
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 30
#1

Перегруженную функцию переделать в виртуальную - C++

12.12.2013, 10:21. Просмотров 273. Ответов 9
Метки нет (Все метки)

Сам как не знаю сделать пожалуйста помогите)) Есть перегруженная функция, нужно сделать из нее виртуальную функцию. Даже не обязательно из этой программы, просто по заданию.
Задание. Дата в формате (день, месяц, год). ++увеличение даты на 1 сутки, -- уменьшение даты на 1 сутки, + сложение двух дат.
Код C++
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
135
136
137
138
#include <iostream>
#include <math.h>
using namespace std;
 
class date
{
        public:
             int day,month,year;
             friend date operator ++(date d1);
             friend date operator --(date d2);
             friend date operator +(date d1,date d2);
};
 
date operator ++(date d1)
{
     if ((d1.month==1) || (d1.month==3) || (d1.month==5) || (d1.month==7) || (d1.month==8) || (d1.month==10))
     {
                    if (d1.day==31)
                    {
                                  d1.day=1;
                                  d1.month=d1.month+1;
                    }
                    else {d1.day=d1.day+1;}
     }
     else if ((d1.month==4) || (d1.month==6) || (d1.month==9) || (d1.month==11))
     {
                      if (d1.day==30)
                    {
                                  d1.day=1;
                                  d1.month=d1.month+1;
                    }
                    else {d1.day=d1.day+1;}
     }
     else if (d1.month==12)
     {
          if(d1.day==31)
          {
                       d1.day=1;
                       d1.month=1;
                       d1.year=d1.year+1;
          }
          else {d1.day=d1.day+1;}
     }
     else if (d1.month==2)
     {
                        if (d1.day==28)
                    {
                                  d1.day=1;
                                  d1.month=d1.month+1;
                    }
                    else {d1.day=d1.day+1;}
     }
     else {cout <<"Data error!";}
     return d1;
}
 
date operator --(date d2)
{
     if ((d2.month==2) || (d2.month==4) || (d2.month==6) || (d2.month==8) || (d2.month==9) || (d2.month==11))
     {
                    if (d2.day==1)
                    {
                                  d2.day=31;
                                  d2.month=d2.month-1;
                    }
                    else {d2.day=d2.day-1;}
     }
     else if ((d2.month==5) || (d2.month==7) || (d2.month==10) || (d2.month==12))
     {
                      if (d2.day==1)
                    {
                                  d2.day=30;
                                  d2.month=d2.month-1;
                    }
                    else {d2.day=d2.day-1;}
     }
     else if (d2.month==1)
     {
          if(d2.day==1)
          {
                       d2.day=31;
                       d2.month=12;
                       d2.year=d2.year-1;
          }
          else {d2.day=d2.day-1;}
     }
     else if (d2.month==3)
     {
              if (d2.day==1)
                    {
                                  d2.day=28;
                                  d2.month=d2.month-1;
                    }
                    else {d2.day=d2.day-1;}
     }
     else {cout <<"Data error!";}
     return d2;
}
 
date operator +(date d1,date d2)
{
     date d;
     d.year=d1.year+d2.year;
     d.month=d1.month+d2.month;
     d.day=d1.day+d2.day;
     if (d.month>12){d.month=d.month-12;d.year=d.year+1;}
     if (d.day>31){d.day=d.day-31;d.month=d.month+1;}
     if (d.month>12){d.month=d.month-12;d.year=d.year+1;}
     return d;
}
 
int main()
{
     date d1,d2,d3;
     cout <<"Enter first date:"<<endl;
     cout <<"Day:";
     cin >>d1.day;
     cout <<"Month:";
     cin >>d1.month;
     cout <<"Year:";
     cin >>d1.year;
     cout <<endl<<"Enter second date:"<<endl;
     cout <<"Day:";
     cin >>d2.day;
     cout <<"Month:";
     cin >>d2.month;
     cout <<"Year:";
     cin >>d2.year;
     cout <<endl;
     d3=d1+d2;
     d1=++d1;
     d2=--d2;
     cout <<"First date increased by the day:"<<d1.day<<"."<<d1.month<<"."<<d1.year<<endl;
     cout <<"Second date less the day:"<<d2.day<<"."<<d2.month<<"."<<d2.year<<endl;
     cout <<"Add two date:"<<d3.day<<"."<<d3.month<<"."<<d3.year<<endl;
     system ("PAUSE");
     return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2013, 10:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегруженную функцию переделать в виртуальную (C++):

Написать перегруженную функцию - C++
Написать перегруженные функции и основную программу, которая их вызывает. 1. для сложения целых чисел; 2. для сложения комплексных...

Написать перегруженную функцию - C++
Написать перегруженную функцию для возведения в степень и извлечения корня.

Класс Integer и опредлить перегруженную функцию - C++
Здравстуйте у меня вот такое задание: Создать класс целых чисел integer. Определить перегруженную функцию, возвращающую максимальное...

Как переопределить перегруженную функцию в производном классе? - C++
Как переопределить перегруженную функцию в производном классе? #include &lt;iostream&gt; class Number { public: virtual Number*...

Создать перегруженную функцию для вывода нечетных элементов массива - C++
Сделать через перегруженную функцию: Задан массив целых чисел. Вывести на экран элементы, являющиеся нечетными числами. Реализовать для...

Создать перегруженную функцию mas(), выводящую одномерный статический числовой массив - C++
Может кто помочь пожалуйста, надо создать функцию mas(), которая выводит одномерный статический числовой массив объектов, символьный массив...

9
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,127
12.12.2013, 10:41 #2
Есть перегруженная функция
Покажите.
Если вы про операторы тот зачет тут виртуализация
0
выручайте 23
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 30
12.12.2013, 11:25  [ТС] #3
Мне нужно на базе этого задания построить иерархию классов, сделав какой-либо из методов класса виртуальным, через функцию virtual
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,127
12.12.2013, 12:18 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Date
{
        public:
             int day,month,year;
             friend date operator ++(date d1);
             friend date operator --(date d2);
             friend date operator +(date d1,date d2);
             virtual void print();//тут реализуете вывод даты на экран
};
 
class DateTime : public Date
{
 
   public:
//тут реализуете новый функционал для перегруженной-виртуальной-унаследованной функции
//например так
              void print()
              {
                  Date::print();//вызываем ф-ю базового класса
                   std::cout << hours << ":" << minutes << ":" << seconds;
                }
};
Добавлено через 4 минуты
Хотя это неправильное использование наследования, но думаю смысл вы поняли.

Добавлено через 7 минут
Правилнее как то так
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
class IDateTime
{
   public:
          virtual void print() = 0;
};
 
class Date : public IDateTime{
        public:
                void print();
};
 
class Time : public IDateTime{
         public:
                void print();
};
 
class DateTime : public IDateTime{
 private:
            Date date;
            Time time;
public:
          void print()
          {
              date.print();
              time.print();
           }
};
1
выручайте 23
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 30
12.12.2013, 12:46  [ТС] #5
спасибо большое, а можете пожалуйста показать как целиком со всей программой выглядит, а то у меня чет не компилирует
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,127
12.12.2013, 12:57 #6
а то у меня чет не компилирует
а что не копилируется, ваш код или то что я привел?
0
выручайте 23
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 30
12.12.2013, 13:01  [ТС] #7
мой компилируется, просто я не очень понял как ваш пример в него вставить
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,127
12.12.2013, 13:04 #8
Мне нужно на базе этого задания построить иерархию классов
А что за класс вы собираетесь делать наследуя Date?
0
выручайте 23
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 30
12.12.2013, 13:05  [ТС] #9
ага
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,127
12.12.2013, 14:16 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если я правильно понял то как то так
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include <iostream>
using namespace std;
 
class IDate
{
      public:
             virtual void print() = 0;
};
 
class date : public IDate
{
        public:
             int day,month,year;
             friend date operator ++(date d1);
             friend date operator --(date d2);
             friend date operator +(date d1,date d2);
             
             void print();
};
 
date operator ++(date d1)
{
     if ((d1.month==1) || (d1.month==3) || (d1.month==5) || (d1.month==7) || (d1.month==8) || (d1.month==10))
     {
                    if (d1.day==31)
                    {
                                  d1.day=1;
                                  d1.month=d1.month+1;
                    }
                    else {d1.day=d1.day+1;}
     }
     else if ((d1.month==4) || (d1.month==6) || (d1.month==9) || (d1.month==11))
     {
                      if (d1.day==30)
                    {
                                  d1.day=1;
                                  d1.month=d1.month+1;
                    }
                    else {d1.day=d1.day+1;}
     }
     else if (d1.month==12)
     {
          if(d1.day==31)
          {
                       d1.day=1;
                       d1.month=1;
                       d1.year=d1.year+1;
          }
          else {d1.day=d1.day+1;}
     }
     else if (d1.month==2)
     {
                        if (d1.day==28)
                    {
                                  d1.day=1;
                                  d1.month=d1.month+1;
                    }
                    else {d1.day=d1.day+1;}
     }
     else {cout <<"Data error!";}
     return d1;
}
 
date operator --(date d2)
{
     if ((d2.month==2) || (d2.month==4) || (d2.month==6) || (d2.month==8) || (d2.month==9) || (d2.month==11))
     {
                    if (d2.day==1)
                    {
                                  d2.day=31;
                                  d2.month=d2.month-1;
                    }
                    else {d2.day=d2.day-1;}
     }
     else if ((d2.month==5) || (d2.month==7) || (d2.month==10) || (d2.month==12))
     {
                      if (d2.day==1)
                    {
                                  d2.day=30;
                                  d2.month=d2.month-1;
                    }
                    else {d2.day=d2.day-1;}
     }
     else if (d2.month==1)
     {
          if(d2.day==1)
          {
                       d2.day=31;
                       d2.month=12;
                       d2.year=d2.year-1;
          }
          else {d2.day=d2.day-1;}
     }
     else if (d2.month==3)
     {
              if (d2.day==1)
                    {
                                  d2.day=28;
                                  d2.month=d2.month-1;
                    }
                    else {d2.day=d2.day-1;}
     }
     else {cout <<"Data error!";}
     return d2;
}
 
date operator +(date d1,date d2)
{
     date d;
     d.year=d1.year+d2.year;
     d.month=d1.month+d2.month;
     d.day=d1.day+d2.day;
     if (d.month>12){d.month=d.month-12;d.year=d.year+1;}
     if (d.day>31){d.day=d.day-31;d.month=d.month+1;}
     if (d.month>12){d.month=d.month-12;d.year=d.year+1;}
     return d;
}
 
void date::print()
{
     cout << day << ":" << month << ":" << year;
}
 
int main()
{
     date d1,d2,d3;
     cout <<"Enter first date:"<<endl;
     cout <<"Day:";
     cin >>d1.day;
     cout <<"Month:";
     cin >>d1.month;
     cout <<"Year:";
     cin >>d1.year;
     cout <<endl<<"Enter second date:"<<endl;
     cout <<"Day:";
     cin >>d2.day;
     cout <<"Month:";
     cin >>d2.month;
     cout <<"Year:";
     cin >>d2.year;
     cout <<endl;
     d3=d1+d2;
     d1=++d1;
     d2=--d2;
     /*cout <<"First date increased by the day:"<<d1.day<<"."<<d1.month<<"."<<d1.year<<endl;
     cout <<"Second date less the day:"<<d2.day<<"."<<d2.month<<"."<<d2.year<<endl;
     cout <<"Add two date:"<<d3.day<<"."<<d3.month<<"."<<d3.year<<endl;*/
 
     cout << "First date increased by the day: "; d1.print(); cout << endl;
     cout <<"Second date less the day: "; d2.print(); cout << endl;
     cout <<"Add two date: "; d3.print(); cout << endl;
     
     system ("PAUSE");
     return 0;
}
1
12.12.2013, 14:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2013, 14:16
Привет! Вот еще темы с ответами:

не получается написать перегруженную функцию, которая возвращает значение в зависимости от набора формальных - C++
Которая возвращает значение в зависимости от набора формальных параметров:z=min(x,y)для 3 типов параметра x:int, float; double Я начал...

Написать шаблонную, перегруженную функцию которая возвращает минимальный из трех передаваемых в нее параметров - C++
Доброго всем дня! Помогите пожалуйста написать шаблонную, перегруженную функцию которая возвращает минимальный из трех передаваемых в нее...

Указатель на виртуальную функцию - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; class A { public: virtual void f(){printf(&quot;a\n&quot;);}; }; class B:public...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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