С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
4 / 4 / 5
Регистрация: 13.10.2016
Сообщений: 116

Реализовать иерархию классов (абк Software и его потомки) и функцию поиска по заданному полю

08.05.2017, 19:29. Показов 875. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Нужна помощь с кодом. Тема задания "Классы(Абстрактные)". Задания прикреплю как и код. Кому не сложно помогите, пожалуйста. Код не компилируется.

Задание:
1. Создать абстрактный класс Software с методами, позволяющими вывести на экран информацию о программном обеспечении, а также определить соответствие возможности использования (на момент текущей даты).
2. Создать производные классы: FreeSoftware (название, производитель), SharewareSoftware (название, производитель, дата установки, срок бесплатного использования), ProprietarySoftware (название, производитель, цена, дата установки, срок использования).
3. Создать базу (массив) из n видов программного обеспечения, вывести полную информацию из базы на экран, а также организовать поиск программного обеспечения, которое допустимо использовать на текущую дату.
Код:
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#include <iostream>
#include <string>
 
using namespace std;
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Date {
private:
    int year, month, day;
public:
    Date() {
        year = 1; month = 1; day = 1;
    }
    Date(int y, int m, int d) { year = y; month = m; day = d; }
 
    void setDate(int new_y, int new_m, int new_d){
        year = new_y;
        month = new_m;
        day = new_d;
    }
 
    int getYear(){
        return year;
    }
    int getMonth(){
        return month;
    }
    int getDay(){
        return day;
    }
 
    void Show() {
        cout << day << "." << month << "." << year << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Software {
protected:
    string p_name, p_manufacturer;
public:
    Software() {}
    Software(string Name, string Manufacturer) : p_name(Name), p_manufacturer(Manufacturer) {}
    virtual void Show(){
        cout << "Name " << p_name << endl;
        cout << "Manufacturer " << p_manufacturer << endl;
    }
    virtual void TimeUse(Date *dat) = 0;
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class FreeSoftware : public Software {
public:
    FreeSoftware() {}
    FreeSoftware(string Name, string Manufacturer) : Software(Name, Manufacturer)
    {}
 
    void setFreeSoftware(string new_Name, string new_Manufacturer) {
        p_name = new_Name;
        p_manufacturer = new_Manufacturer;
    }
 
    string getName() {
        return p_name;
    }
    string getManufacturer() {
        return p_manufacturer;
    }
 
    void TimeUse(Date *data) {
        cout << "Not limited" << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class SharewareSoftware : public Software {
private:
    Date *p_date;
    int p_freetimeuse;
public:
    SharewareSoftware() {}
    SharewareSoftware(string Name, string Manufacturer, Date *Date, int Freetime) : Software(Name, Manufacturer), p_date(Date), p_freetimeuse(Freetime)
    {}
 
    void setSharewareSoftware(string new_Name, string new_Manufacturer, Date *new_Date, int new_FreeTimeUse) {
        p_name = new_Name;
        p_manufacturer = new_Manufacturer;
        p_date = new_Date;
        p_freetimeuse = new_FreeTimeUse;
    }
 
    string getName() {
        return p_name;
    }
    string getManufacturer() {
        return p_manufacturer;
    }
    Date *getDate() {
        return p_date;
    }
    int getFreeTimeUse() {
        return p_freetimeuse;
    }
 
    void Show() {
        Software::Show();
        cout << "Date "; p_date->Show();
        cout << "FreeTimeUse " << p_freetimeuse << " year(s)" << endl;
    }
 
    void TimeUse(Date *data1) {
        if (p_date->getYear() + p_freetimeuse < data1->getYear()) {
            if (p_date->getMonth() < data1->getMonth()) {
                if (p_date->getDay() < data1->getDay()) {
                    cout << "It is possible to use" << endl;
                }
                else cout << "Cant't use it" << endl;
            }
            else cout << "Cant't use it" << endl;
        }
        else cout << "Cant't use it" << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class ProprietarySoftware : public Software {
private:
    Date *p_date;
    int p_timeuse;
    float p_price;
public:
    ProprietarySoftware(){}
    ProprietarySoftware(string Name, string Manufacturer, Date *Date, int TimeUse, float Price) : Software(Name, Manufacturer), p_date(Date), p_timeuse(TimeUse), p_price(Price)
    {}
 
    void setSharewareSoftware(string new_Name, string new_Manufacturer, Date *new_Date, int new_TimeUse, float new_Price) {
        p_name = new_Name;
        p_manufacturer = new_Manufacturer;
        p_date = new_Date;
        p_timeuse = new_TimeUse;
        p_price = new_Price;
    }
 
    string getName() {
        return p_name;
    }
    string getManufacturer() {
        return p_manufacturer;
    }
    Date *getDate() {
        return p_date;
    }
    int getTimeUse() {
        return p_timeuse;
    }
    float getPrice() {
        return p_price;
    }
 
    void Show() {
        Software::Show();
        cout << "Date "; p_date->Show();
        cout << "TimeUse " << p_timeuse << " year(s)" << endl;
        cout << "Price " << p_price << endl;
    }
 
    void TimeUse(Date *data2) {
        if ((p_date->getYear() + p_timeuse) < data2->getYear()) {
            if (p_date->getMonth() < data2->getMonth()) {
                if (p_date->getDay() < data2->getDay()) {
                    cout << "It is ppssible to use" << endl;
                }
                else cout << "Cant't use it" << endl;
            }
            else cout << "Cant't use it" << endl;
        }
        else cout << "Cant't use it" << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main() {
    int year, month, day;
    cout << "Enter date ";
    cout << "day "; cin >> day;
    cout << "\t month "; cin >> month;
    cout << "\t year "; cin >> year;
    Date *today = new Date(day, month, year);
 
    Software *objects[3];
    objects[0] = new FreeSoftware("Programma", "Sozdatel");
    objects[1] = new SharewareSoftware("Programma2", "Sozdatel2", new Date(15, 3, 2017), 2);
    objects[2] = new ProprietarySoftware("Programma3", "Sozdatel3", new Date(24, 11, 2016), 1, 100);
 
    for (int i = 0; i < 4; i++)
    {
        objects[i]->Show();
        cout << "Software: ";
        objects[i]->TimeUse(new Date(day, month, year));
    }
    for (int i = 0; i < 4; i++)
    {
        delete objects[i];
    }
    system("pause");
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.05.2017, 19:29
Ответы с готовыми решениями:

Наследование: реализовать иерархию классов (класс String, его потомки - SymbString и BinStryng)
Написать программу, демонстрирующую работу с объектами двух типов: Т1 и Т2, для чего создать систему соответствующих классов. Каждый объект...

Реализовать функцию поиска по заданному полю в массиве структур (файловый ввод/вывод)
Имеется информация о клиентах телефонной компании и предоставляемых им услугах. Каждая услуга имеет собственный тариф, а каждый клиент...

Реализовать функцию поиска по заданному полю в массиве объектов типа "Person"
Здраствуйте. Есть такое задание: нужно с помощью классов создать 100 человек с параметрами вес и возраст, после чего найти самого старшого...

9
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
08.05.2017, 20:22
что за ошибки?
0
4 / 4 / 5
Регистрация: 13.10.2016
Сообщений: 116
08.05.2017, 20:26  [ТС]
Предполагаю в этой строке
Цитата Сообщение от vladrrom Посмотреть сообщение
C++
194
objects[i]->TimeUse(new Date(day, month, year));
Мне нужно определить возможно ли пользоваться этим оборудованием исходя из сегодняшней даты. У 2/3 программ есть время пользования, у остальной же оно безгранично. Вот функция определения:
Цитата Сообщение от vladrrom Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void TimeUse(Date* data1)
{
    if (p_date->getYear() + p_freetimeuse < data1->getYear()) {
        if (p_date->getMonth() < data1->getMonth()) {
            if (p_date->getDay() < data1->getDay()) {
                cout << "It is possible to use" << endl;
            }
            else
                cout << "Cant't use it" << endl;
        }
        else
            cout << "Cant't use it" << endl;
    }
    else
        cout << "Cant't use it" << endl;
}
0
4 / 4 / 5
Регистрация: 13.10.2016
Сообщений: 116
08.05.2017, 20:28  [ТС]
Не компилируется и выдаёт неверный ответ (Нельзя использовать, хотя возможно)
Миниатюры
Реализовать иерархию классов (абк Software и его потомки) и функцию поиска по заданному полю   Реализовать иерархию классов (абк Software и его потомки) и функцию поиска по заданному полю  
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
09.05.2017, 06:01
Цитата Сообщение от vladrrom Посмотреть сообщение
Не компилируется
Компилируется!
Но выдает ошибку на этапе исполненения, т.к. в цикле
Цитата Сообщение от vladrrom Посмотреть сообщение
C++
1
for (int i = 0; i < 4; i++)
Вы пытаетесь вывести информацию о 4 объектах, а создали только три.

Хочу отметить, что Вы очень фривольно обращаетесь с оператором new, т.к. для КАЖДОГО new Вы обязаны освободить память оператором delete.
И как же это сделать, например, в
Цитата Сообщение от vladrrom Посмотреть сообщение
objects[i]->TimeUse(new Date(day, month, year))
0
4 / 4 / 5
Регистрация: 13.10.2016
Сообщений: 116
09.05.2017, 15:32  [ТС]
Увидел ошибку, спасибо, теперь компилируется без проблем, но выводит посредственно неверный ответ с использованием программы..
Хорошо, а если мы возьмём переменную today
Цитата Сообщение от vladrrom Посмотреть сообщение
C++
1
Date *today = new Date(day, month, year);
и вставим сюда, то ничего не изменится..
objects[i]->TimeUse(today)

Каким образом можно запросить введенные данные с клавиатуры?
objects[i]->TimeUse(Date *today) ???
0
4 / 4 / 5
Регистрация: 13.10.2016
Сообщений: 116
10.05.2017, 19:40  [ТС]
Тема ещё актуальна..
Измененный код:
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#include <iostream>
#include <string>
 
using namespace std;
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Date {
private:
    int year, month, day;
public:
    Date() {
        year = 1; month = 1; day = 1;
    }
    Date(int y, int m, int d) { year = y; month = m; day = d; }
 
    void setDate(int new_y, int new_m, int new_d){
        year = new_y;
        month = new_m;
        day = new_d;
    }
 
    int getYear(){
        return year;
    }
    int getMonth(){
        return month;
    }
    int getDay(){
        return day;
    }
 
    void Show() {
        cout << day << "." << month << "." << year << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Software {
protected:
    string p_name, p_manufacturer;
public:
    Software() {}
    Software(string Name, string Manufacturer) : p_name(Name), p_manufacturer(Manufacturer) {}
    virtual void Show(){
        cout << "Name " << p_name << endl;
        cout << "Manufacturer " << p_manufacturer << endl;
    }
    virtual void TimeUse(Date *dat) = 0;
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class FreeSoftware : public Software {
public:
    FreeSoftware() {}
    FreeSoftware(string Name, string Manufacturer) : Software(Name, Manufacturer)
    {}
 
    void setFreeSoftware(string new_Name, string new_Manufacturer) {
        p_name = new_Name;
        p_manufacturer = new_Manufacturer;
    }
 
    string getName() {
        return p_name;
    }
    string getManufacturer() {
        return p_manufacturer;
    }
 
    void TimeUse(Date *data) {
        cout << "Not limited" << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class SharewareSoftware : public Software {
private:
    Date *p_date;
    int p_freetimeuse;
public:
    SharewareSoftware() {}
    SharewareSoftware(string Name, string Manufacturer, Date *Date, int Freetime) : Software(Name, Manufacturer), p_date(Date), p_freetimeuse(Freetime)
    {}
 
    void setSharewareSoftware(string new_Name, string new_Manufacturer, Date *new_Date, int new_FreeTimeUse) {
        p_name = new_Name;
        p_manufacturer = new_Manufacturer;
        p_date = new_Date;
        p_freetimeuse = new_FreeTimeUse;
    }
 
    string getName() {
        return p_name;
    }
    string getManufacturer() {
        return p_manufacturer;
    }
    Date *getDate() {
        return p_date;
    }
    int getFreeTimeUse() {
        return p_freetimeuse;
    }
 
    void Show() {
        Software::Show();
        cout << "Date "; p_date->Show();
        cout << "FreeTimeUse " << p_freetimeuse << " year(s)" << endl;
    }
 
    void TimeUse(Date *data1) {
        if (p_date->getYear() + p_freetimeuse < data1->getYear()) {
            if (p_date->getMonth() < data1->getMonth()) {
                if (p_date->getDay() < data1->getDay()) {
                    cout << "It is possible to use" << endl;
                }
                else cout << "Cant't use it" << endl;
            }
            else cout << "Cant't use it" << endl;
        }
        else cout << "Cant't use it" << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class ProprietarySoftware : public Software {
private:
    Date *p_date;
    int p_timeuse;
    float p_price;
public:
    ProprietarySoftware(){}
    ProprietarySoftware(string Name, string Manufacturer, Date *Date, int TimeUse, float Price) : Software(Name, Manufacturer), p_date(Date), p_timeuse(TimeUse), p_price(Price)
    {}
 
    void setSharewareSoftware(string new_Name, string new_Manufacturer, Date *new_Date, int new_TimeUse, float new_Price) {
        p_name = new_Name;
        p_manufacturer = new_Manufacturer;
        p_date = new_Date;
        p_timeuse = new_TimeUse;
        p_price = new_Price;
    }
 
    string getName() {
        return p_name;
    }
    string getManufacturer() {
        return p_manufacturer;
    }
    Date *getDate() {
        return p_date;
    }
    int getTimeUse() {
        return p_timeuse;
    }
    float getPrice() {
        return p_price;
    }
 
    void Show() {
        Software::Show();
        cout << "Date "; p_date->Show();
        cout << "TimeUse " << p_timeuse << " year(s)" << endl;
        cout << "Price " << p_price << endl;
    }
 
    void TimeUse(Date *data2) {
        if ((p_date->getYear() + p_timeuse) < data2->getYear()) {
            if (p_date->getMonth() < data2->getMonth()) {
                if (p_date->getDay() < data2->getDay()) {
                    cout << "It is ppssible to use" << endl;
                }
                else cout << "Cant't use it" << endl;
            }
            else cout << "Cant't use it" << endl;
        }
        else cout << "Cant't use it" << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main() {
    int year, month, day;
    cout << "Enter date ";
    cout << "day "; cin >> day;
    cout << "\t month "; cin >> month;
    cout << "\t year "; cin >> year;
    Date *today = new Date(day, month, year);
 
    Software *objects[3];
    objects[0] = new FreeSoftware("Programma", "Sozdatel");
    objects[1] = new SharewareSoftware("Programma2", "Sozdatel2", new Date(15, 3, 2017), 2);
    objects[2] = new ProprietarySoftware("Programma3", "Sozdatel3", new Date(24, 11, 2016), 1, 100);
 
    for (int i = 0; i < 3; i++)
    {
        objects[i]->Show();
        cout << "Software: ";
        objects[i]->TimeUse(today);
    }
    for (int i = 0; i < 3; i++)
    {
        delete objects[i];
    }
    system("pause");
    return 0;
}
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
10.05.2017, 21:10
 Комментарий модератора 
vladrrom, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.3 (порядок именования тем).

.
0
4 / 4 / 5
Регистрация: 13.10.2016
Сообщений: 116
11.05.2017, 18:40  [ТС]
Доработал код и выделил тот момент на котором происходит ошибка:
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#include <iostream>
#include <string>
 
using namespace std;
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Date {
private:
    int year, month, day;
public:
    Date() {
        year = 1; month = 1; day = 1;
    }
    Date(int y, int m, int d) { year = y; month = m; day = d; }
 
    void setDate(int new_y, int new_m, int new_d){
        year = new_y;
        month = new_m;
        day = new_d;
    }
 
    int getYear(){
        return year;
    }
    int getMonth(){
        return month;
    }
    int getDay(){
        return day;
    }
 
    void Show() {
        cout << day << "." << month << "." << year << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Software {
protected:
    string p_name, p_manufacturer;
public:
    Software() {}
    Software(string Name, string Manufacturer) : p_name(Name), p_manufacturer(Manufacturer) {}
    virtual void Show(){
        cout << "Name " << p_name << endl;
        cout << "Manufacturer " << p_manufacturer << endl;
    }
    virtual void TimeUse(Date *dat) = 0;
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class FreeSoftware : public Software {
public:
    FreeSoftware() {}
    FreeSoftware(string Name, string Manufacturer) : Software(Name, Manufacturer)
    {}
 
    void setFreeSoftware(string new_Name, string new_Manufacturer) {
        p_name = new_Name;
        p_manufacturer = new_Manufacturer;
    }
 
    string getName() {
        return p_name;
    }
    string getManufacturer() {
        return p_manufacturer;
    }
 
    void TimeUse(Date *data) {
        cout << "Not limited" << endl << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class SharewareSoftware : public Software {
private:
    Date *p_date;
    int p_freetimeuse;
public:
    SharewareSoftware() {}
    SharewareSoftware(string Name, string Manufacturer, Date *Date, int Freetime) : Software(Name, Manufacturer), p_date(Date), p_freetimeuse(Freetime)
    {}
 
    void setSharewareSoftware(string new_Name, string new_Manufacturer, Date *new_Date, int new_FreeTimeUse) {
        p_name = new_Name;
        p_manufacturer = new_Manufacturer;
        p_date = new_Date;
        p_freetimeuse = new_FreeTimeUse;
    }
 
    string getName() {
        return p_name;
    }
    string getManufacturer() {
        return p_manufacturer;
    }
    Date *getDate() {
        return p_date;
    }
    int getFreeTimeUse() {
        return p_freetimeuse;
    }
 
    void Show() {
        Software::Show();
        cout << "Date "; p_date->Show();
        cout << "FreeTimeUse " << p_freetimeuse << " year(s)" << endl;
    }
 
    void TimeUse(Date *data1) {
        if (p_date->getYear() + p_freetimeuse <= data1->getYear()) {
            if (p_date->getMonth() <= data1->getMonth()) {
                if (p_date->getDay() <= data1->getDay()) {
                    cout << "It is possible to use" << endl << endl;
                }
                else cout << "Cant't use it (Day)" << endl << endl;
            }
            else cout << "Cant't use it (Month)" << endl << endl;
        }
        else cout << "Cant't use it (Year)" << endl << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class ProprietarySoftware : public Software {
private:
    Date *p_date;
    int p_timeuse;
    float p_price;
public:
    ProprietarySoftware(){}
    ProprietarySoftware(string Name, string Manufacturer, Date *Date, int TimeUse, float Price) : Software(Name, Manufacturer), p_date(Date), p_timeuse(TimeUse), p_price(Price)
    {}
 
    void setSharewareSoftware(string new_Name, string new_Manufacturer, Date *new_Date, int new_TimeUse, float new_Price) {
        p_name = new_Name;
        p_manufacturer = new_Manufacturer;
        p_date = new_Date;
        p_timeuse = new_TimeUse;
        p_price = new_Price;
    }
 
    string getName() {
        return p_name;
    }
    string getManufacturer() {
        return p_manufacturer;
    }
    Date *getDate() {
        return p_date;
    }
    int getTimeUse() {
        return p_timeuse;
    }
    float getPrice() {
        return p_price;
    }
 
    void Show() {
        Software::Show();
        cout << "Date "; p_date->Show();
        cout << "TimeUse " << p_timeuse << " year(s)" << endl;
        cout << "Price " << p_price << endl;
    }
 
    void TimeUse(Date *data2) {
        if ((p_date->getYear() + p_timeuse) <= data2->getYear()) {
            if (p_date->getMonth() <= data2->getMonth()) {
                if (p_date->getDay() <= data2->getDay()) {
                    cout << "It is ppssible to use" << endl << endl;
                }
                else cout << "Cant't use it (Day)" << endl << endl;
            }
            else cout << "Cant't use it (Month)" << endl << endl;
        }
        else cout << "Cant't use it (Year)" << endl << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main() {
    int year, month, day;
    cout << "Enter date ";
    cout << "day "; cin >> day;
    cout << "\t month "; cin >> month;
    cout << "\t year "; cin >> year; cout << endl;
    Date *today = new Date(day, month, year);
 
    Software *objects[3];
    objects[0] = new FreeSoftware("Programma", "Sozdatel");
    objects[1] = new SharewareSoftware("Programma2", "Sozdatel2", new Date(15, 3, 2017), 2);
    objects[2] = new ProprietarySoftware("Programma3", "Sozdatel3", new Date(24, 11, 2016), 1, 100);
 
    for (int i = 0; i < 3; i++)
    {
        objects[i]->Show();
        cout << "Software: ";
        objects[i]->TimeUse(today);
    }
    for (int i = 0; i < 3; i++)
    {
        delete objects[i];
    }
    system("pause");
    return 0;
}
И походу ошибка в операции сравнения.. помогите разобраться, что не так
C++
1
2
3
4
5
6
7
8
9
10
11
12
void TimeUse(Date *data2) {
        if ((p_date->getYear() + getTimeUse()) <= data2->getYear()) {
            if (p_date->getMonth() <= data2->getMonth()) {
                if (p_date->getDay() <= data2->getDay()) {
                    cout << "It is ppssible to use" << endl << endl;
                }
                else cout << "Cant't use it (Day)" << endl << endl;
            }
            else cout << "Cant't use it (Month)" << endl << endl;
        }
        else cout << "Cant't use it (Year)" << endl << endl;
    }
Миниатюры
Реализовать иерархию классов (абк Software и его потомки) и функцию поиска по заданному полю  
0
4 / 4 / 5
Регистрация: 13.10.2016
Сообщений: 116
11.05.2017, 20:41  [ТС]
Сделано. Вот рабочий код, если кому-то надо:
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#include <iostream>
#include <string>
 
using namespace std;
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Date {
private:
    int day, month, year;
public:
    Date() {
        year = 1; month = 1; day = 1;
    }
    Date(int y, int m, int d) { year = y; month = m; day = d; }
 
    void setDate(int new_y, int new_m, int new_d){
        year = new_y;
        month = new_m;
        day = new_d;
    }
 
    int getDay(){
        return day;
    }
    int getMonth(){
        return month;
    }
    int getYear(){
        return year;
    }
 
    void Show() {
        cout << day << "." << month << "." << year << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Software {
protected:
    string p_name, p_manufacturer;
public:
    Software() {}
    Software(string Name, string Manufacturer) : p_name(Name), p_manufacturer(Manufacturer) {}
    virtual void Show(){
        cout << "Name " << p_name << endl;
        cout << "Manufacturer " << p_manufacturer << endl;
    }
    virtual void TimeUse(Date *dat) = 0;
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class FreeSoftware : public Software {
public:
    FreeSoftware() {}
    FreeSoftware(string Name, string Manufacturer) : Software(Name, Manufacturer)
    {}
 
    void setFreeSoftware(string new_Name, string new_Manufacturer) {
        p_name = new_Name;
        p_manufacturer = new_Manufacturer;
    }
 
    string getName() {
        return p_name;
    }
    string getManufacturer() {
        return p_manufacturer;
    }
 
    void TimeUse(Date *data) {
        cout << "Not limited" << endl << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class SharewareSoftware : public Software {
private:
    Date *p_date;
    int p_freetimeuse;
public:
    SharewareSoftware() {}
    SharewareSoftware(string Name, string Manufacturer, Date *Date, int Freetime) : Software(Name, Manufacturer), p_date(Date), p_freetimeuse(Freetime)
    {}
 
    void setSharewareSoftware(string new_Name, string new_Manufacturer, Date *new_Date, int new_FreeTimeUse) {
        p_name = new_Name;
        p_manufacturer = new_Manufacturer;
        p_date = new_Date;
        p_freetimeuse = new_FreeTimeUse;
    }
 
    string getName() {
        return p_name;
    }
    string getManufacturer() {
        return p_manufacturer;
    }
    Date *getDate() {
        return p_date;
    }
    int getFreeTimeUse() {
        return p_freetimeuse;
    }
 
    void Show() {
        Software::Show();
        cout << "Date "; p_date->Show();
        cout << "FreeTimeUse " << p_freetimeuse << " year(s)" << endl;
    }
 
    void TimeUse(Date *data1) {
        cout << "FreeTimeUse = " << getFreeTimeUse() << " and Year = " << p_date->getYear() << " and NowYear is " << data1->getYear() << endl;
        if (data1->getYear() < p_date->getYear() + getFreeTimeUse())
            cout << "It's possible to use" << endl << endl;
        else if (data1->getYear() == p_date->getYear() + getFreeTimeUse()){
            if (data1->getMonth() < p_date->getMonth())
                cout << "It's possible to use" << endl << endl;
            else if (data1->getMonth() == p_date->getMonth()){
                if (data1->getDay() <= p_date->getDay())
                    cout << "It's possible to use" << endl << endl;
                else cout << "Cant't use it (Day limit is " << p_date->getDay() << ")" << endl << endl;
            }
            else cout << "Cant't use it (Month list is " << p_date->getMonth() << ")" << endl << endl;
        }
        else cout << "Cant't use it (Year), because limit is " << p_date->getYear() + getFreeTimeUse() << endl << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class ProprietarySoftware : public Software {
private:
    Date *p_date;
    int p_timeuse;
    float p_price;
public:
    ProprietarySoftware(){}
    ProprietarySoftware(string Name, string Manufacturer, Date *Date, int TimeUse, float Price) : Software(Name, Manufacturer), p_date(Date), p_timeuse(TimeUse), p_price(Price)
    {}
 
    void setSharewareSoftware(string new_Name, string new_Manufacturer, Date *new_Date, int new_TimeUse, float new_Price) {
        p_name = new_Name;
        p_manufacturer = new_Manufacturer;
        p_date = new_Date;
        p_timeuse = new_TimeUse;
        p_price = new_Price;
    }
 
    string getName() {
        return p_name;
    }
    string getManufacturer() {
        return p_manufacturer;
    }
    Date *getDate() {
        return p_date;
    }
    int getTimeUse() {
        return p_timeuse;
    }
    float getPrice() {
        return p_price;
    }
 
    void Show() {
        Software::Show();
        cout << "Date "; p_date->Show();
        cout << "TimeUse " << p_timeuse << " year(s)" << endl;
        cout << "Price " << p_price << endl;
    }
 
    void TimeUse(Date *data2) {
        cout << "TimeUse = " << getTimeUse() << " and Year = " << p_date->getYear() << " and NowYear is " << data2->getYear() << endl;
        if (data2->getYear() < p_date->getYear() + getTimeUse())
            cout << "It's possible to use" << endl << endl;
        else if (data2->getYear() == p_date->getYear() + getTimeUse()){
            if (data2->getMonth() < p_date->getMonth())
                cout << "It's possible to use" << endl << endl;
            else if (data2->getMonth() == p_date->getMonth()){
                if (data2->getDay() <= p_date->getDay())
                    cout << "It's possible to use" << endl << endl;
                else cout << "Cant't use it (Day limit is " << p_date->getDay() << ")" << endl << endl;
            }
            else cout << "Cant't use it (Month list is " << p_date->getMonth() << ")" << endl << endl;
        }
        else cout << "Cant't use it (Year), because limit is " << p_date->getYear() + getTimeUse() << endl << endl;
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main() {
    int day, month, year;
    cout << "Enter date: day ";
    cin >> day;
    cout << "\t month "; cin >> month;
    cout << "\t year "; cin >> year; cout << endl;
    Date *today = new Date(year, month, day);
 
    Software *objects[3];
    objects[0] = new FreeSoftware("Programma", "Sozdatel");
    objects[1] = new SharewareSoftware("Programma2", "Sozdatel2", new Date(2017, 3, 15), 2);
    objects[2] = new ProprietarySoftware("Programma3", "Sozdatel3", new Date(2016, 11, 24), 1, 100);
 
    for (int i = 0; i < 3; i++)
    {
        objects[i]->Show();
        cout << "Software: " << endl;
        objects[i]->TimeUse(today);
    }
    for (int i = 0; i < 3; i++)
    {
        delete objects[i];
    }
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.05.2017, 20:41
Помогаю со студенческими работами здесь

Реализовать функцию поиска по заданному полю в списке объектов типа "Собачий питомник"
Имеются сведения о собачьих питомниках: порода собак, фамилия владельца. Количество питомников неизвестно. В каждом питомнике имеется...

Реализовать функцию поиска по заданному полю в массиве структур "Info", содержащих информацию о жителях города
1) Фамилия+имя / разделенные пробелами на одной строчке 2) Город; 3) Адрес /улица,квартира,дом/. 4) Дата рождения 5)...

Реализовать иерархию классов "Университет и его сотрудники"
Первый базовый класс – личность; поля – фамилия, пол, адрес. Во втором базовом классе задается структура университета – факультеты,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru