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

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

08.05.2017, 19:29. Показов 902. Ответов 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
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
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
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru