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

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

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

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

12.12.2013, 10:21. Просмотров 262. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2013, 10:21     Перегруженную функцию переделать в виртуальную
Посмотрите здесь:

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
12.12.2013, 10:41     Перегруженную функцию переделать в виртуальную #2
Есть перегруженная функция
Покажите.
Если вы про операторы тот зачет тут виртуализация
выручайте 23
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 30
12.12.2013, 11:25  [ТС]     Перегруженную функцию переделать в виртуальную #3
Мне нужно на базе этого задания построить иерархию классов, сделав какой-либо из методов класса виртуальным, через функцию virtual
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
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();
           }
};
выручайте 23
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 30
12.12.2013, 12:46  [ТС]     Перегруженную функцию переделать в виртуальную #5
спасибо большое, а можете пожалуйста показать как целиком со всей программой выглядит, а то у меня чет не компилирует
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
12.12.2013, 12:57     Перегруженную функцию переделать в виртуальную #6
а то у меня чет не компилирует
а что не копилируется, ваш код или то что я привел?
выручайте 23
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 30
12.12.2013, 13:01  [ТС]     Перегруженную функцию переделать в виртуальную #7
мой компилируется, просто я не очень понял как ваш пример в него вставить
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
12.12.2013, 13:04     Перегруженную функцию переделать в виртуальную #8
Мне нужно на базе этого задания построить иерархию классов
А что за класс вы собираетесь делать наследуя Date?
выручайте 23
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 30
12.12.2013, 13:05  [ТС]     Перегруженную функцию переделать в виртуальную #9
ага
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2013, 14:16     Перегруженную функцию переделать в виртуальную
Еще ссылки по теме:

Написать шаблонную, перегруженную функцию которая возвращает минимальный из трех передаваемых в нее параметров - 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++
Ребят я пытался, что-то устал, подскажите пожалуйста. Проблема в том, что во вторую виртуальную функцию я не знаю как передать одномерный...

ооп на с++ Вызвать виртуальную функцию - C++
написала класс, но есть одна проблемка. необходимо вызывать virtual float Storona()=0;, но где и как разобрать не могу. Подкиньте идейку...


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

Или воспользуйтесь поиском по форуму:
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
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;
}
Yandex
Объявления
12.12.2013, 14:16     Перегруженную функцию переделать в виртуальную
Ответ Создать тему
Опции темы

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