Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 27.05.2019
Сообщений: 5

Множественное наследование

27.05.2019, 21:14. Показов 1558. Ответов 9

Студворк — интернет-сервис помощи студентам
не учитывается run в коде. т.е. при выводе данных он будто не участвует в процессе.
Задание:
Общая постановка. Создать программу с абстрактным базовым классом и множественным наследованием, (либо с иерархией классов) реализовать в нем:

- конструктор,

- деструктор,

- виртуальную функцию просмотра текущего состояния объекта print(),

- friend – функцию Run().

Производные классы должны содержать переопределенную функцию просмотра состояния объектов, а также при вводе – выводе данных использовать функции обработки исключительных ситуаций. Используя стандартные файловые потоки, информацию об объектах вывести в файл. Для

корректной работы с файлом и корректного ввода данных использовать обработку исключительных ситуаций.
Список товаров, имеющихся на складе, включает в себя наименование товара, количество единиц товара, цену единицы и дату поступления товара на склад. Вывести в алфавитном порядке список товаров, хранящихся больше месяца, стоимость которых превышает 1000000 руб.
мой код:
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
#include <iostream>
#include <istream> 
#include <string.h>
#include <fstream>
using namespace std;
const int MAX = 77;
class sklad
{
public:
    virtual void print() = 0;
    virtual void set() = 0;
};
 
class tovar : public sklad
{
protected:
    int kolic;
    int cena;
    int day;    
    int month;
    int year;
    char *name;
public:
    tovar() :sklad()
    {
        name = new char[MAX];
        name[0] = '\0';
    }
 
    ~tovar()
    {
        delete[]name;
    }
 
    void set() 
    {
        cout << "Введите наименование товара: ";
        cin >> name;
        cin.getline(name,MAX);
        cout << endl;
        cout << "Введите количество товара: ";
        cin >>kolic;
        cout << endl;
        cout << "Введите день, месяц и год появления на складе через Enter: ";
        cout << endl;
        cin >> day;
        cout << ".";
        cin >> month;
        cout << ".";
        cin >> year;
        cout << endl;
        cout << "Введите цену товара: ";
        cin >> cena;
    }
 
    virtual void print() override
    {
        cout << "Количество товара: ";
        cout << kolic;
        cout << endl;
        cout << "Наименование товара: ";
        cout << name;
        cout << endl;
        cout << "Дата появления: ";
        cout << day << "." << month << "." << year;
        cout << endl;
        cout << "Цена товара: ";
        cout << cena;
        cout << endl;
    }
 
    friend void run(tovar *objrun, int n)
    {
        cout << "\nМетод run()";
        int dd = 0;
        int mm = 0;
        int yy = 0;
        int i = 0, j = 0;
        for (i = 0; i<n; i++)
        {
            for (j = 0; j<n; j++)
            {
                if (objrun[i].name>objrun[i + 1].name)
                {
                    tovar temp = objrun[j + 1];
                    objrun[j + 1] = objrun[j];
                    objrun[j] = temp;
                }
            }
        }
        cout << "\nВведите сегодняшнюю дату: ";
        cin >> dd;
        cout << ".";
        cin >> mm;
        cout << ".";
        cin >> yy;
        cout << endl;
        for (i = 0; i < n; i++)
        {
            if (objrun[i].cena > 1000000)
                if (objrun[i].year > yy)
                    cout << objrun[i].name << endl;
                else if (objrun[i].month > mm && objrun[i].day >= dd)
                    cout << objrun[i].name << endl;
        }
    }
 
    void tovar::fileprint()
    {
        try
        {
            ofstream file;
            file.open("laba7.txt",  ios::app);
            file << "Количество: " << kolic << "\n";
            file << "Наименование: " << name << "\n";
            file << "Дата появления: " << day << "." << month << "." << year<< "\n";
            file << "Цена: " << cena << "\n";
            file.close();
        }
        catch (char *fail)
        {
            cout << fail << endl;
        }
    }
};
 
int main()
{
    setlocale(LC_ALL, "");
    try
    {
        int n = 0, i = 0;
        cout << "Введите количество товаров: ";
        cin >> n;
        if (n <= 1) { throw n; }
        cout << endl;
        tovar *obj = new tovar[MAX];
        cout << "Метод set()";
        cout << "\n_______________________________________\n";
        for (i = 0; i<n; i++)
        {
            obj[i].set();
            cout << endl;
        }
        run(obj, n);
        cout << "_______________________________________";
        cout << "\nМетод print()";
        cout << "\nВыводить данные в консоль(y/n)?: ";
        char yn;
        cin >> yn;
        if (yn == 'y')
        {
            for (i = 0; i<n; i++)
            {
                obj[i].print();
                cout << endl;
            }
        }
        
        
        cout << "\nЗаписать данные в файл(y/n)?: ";
        cin >>yn;
        if (yn == 'y')
        {
            for (i = 0; i<n; i++)
            {
                obj[i].fileprint();
            }
            cout << "Файл записан\n";
        }
        else 
        { 
            cout << "Файл не записан\n"; 
        }
        
 
    }
    catch (int n)
    {
        cout << "Неверное число"<<endl;
    }
    system("pause");
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.05.2019, 21:14
Ответы с готовыми решениями:

Множественное наследование
Создать иерархии наследования: телевизор, цифровое устройство - монитор. Создать динамический массив объектов, инициализировать его. Сам...

Множественное наследование POSTAVKA
Разработайте базовый класс POSTAVKA. Элемент класса: -название фирмы-поставщика; -цена поставщика. Методы: -метод,...

Множественное использование одного и того же квалификатора типа
void show( const int const *, int sizex, int sizey, int playerx, int playery); Вот как на эту строку ругается. У меня в программе...

9
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
28.05.2019, 11:17
Цитата Сообщение от glandeil Посмотреть сообщение
не учитывается run в коде. т.е. при выводе данных он будто не участвует в процессе.
Что значит не учитвывается? Компилируется?
0
0 / 0 / 0
Регистрация: 27.05.2019
Сообщений: 5
28.05.2019, 17:24  [ТС]
сам проект запускается и компилится, но он не учитывает работу run. т.е. выводит результат, будто его и нет

Добавлено через 1 минуту
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Что значит не учитвывается? Компилируется?
сам проект запускается и компилится, но он не учитывает работу run. т.е. выводит результат, будто его и нет
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
28.05.2019, 18:56
Цитата Сообщение от glandeil Посмотреть сообщение
сам проект запускается и компилится, но он не учитывает работу run. т.е. выводит результат, будто его и нет
Т.е. cout << "\nМетод run()"; не выводит?

Добавлено через 2 минуты
Цитата Сообщение от glandeil Посмотреть сообщение
for (i = 0; i<n; i++)
* * * * {
* * * * * * for (j = 0; j<n; j++)
* * * * * * {
* * * * * * * * if (objrun[i].name>objrun[i + 1].name)
* * * * * * * * {
* * * * * * * * * * tovar temp = objrun[j + 1];
* * * * * * * * * * objrun[j + 1] = objrun[j];
* * * * * * * * * * objrun[j] = temp;
* * * * * * * * }
* * * * * * }
* * * * }
Здесь явная ошибка - нельзя делать [i+1], [j+1] - на последнем элементе будет выход за границы массива
0
0 / 0 / 0
Регистрация: 27.05.2019
Сообщений: 5
28.05.2019, 21:23  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Т.е. cout << "\nМетод run()"; не выводит?

Добавлено через 2 минуты

Здесь явная ошибка - нельзя делать [i+1], [j+1] - на последнем элементе будет выход за границы массива
так вот эта штука это просто распределение по алфавиту. но даже с закомментированным им, все равно. вот на скрине. должно вывести сначала те, у которых цена больше. но оно выводит тупо по порядку
Миниатюры
Множественное наследование  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
28.05.2019, 21:35
Цитата Сообщение от glandeil Посмотреть сообщение
так вот эта штука это просто распределение по алфавиту. но даже с закомментированным им, все равно. вот на скрине. должно вывести сначала те, у которых цена больше. но оно выводит тупо по порядку
Потому что у тебя сортировка сделана неправильно. Посмотри алгоритмы сортировок
0
0 / 0 / 0
Регистрация: 27.05.2019
Сообщений: 5
28.05.2019, 21:47  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Потому что у тебя сортировка сделана неправильно. Посмотри алгоритмы сортировок
может еще можете подсказать почему не выводится имя товара? вводится, но не выводится
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
28.05.2019, 21:56
Цитата Сообщение от glandeil Посмотреть сообщение
ожет еще можете подсказать почему не выводится имя товара? вводится, но не выводится
Объяви его std::string name, либо char name[MAX]

Добавлено через 1 минуту
И в сортировке
if (objrun[i].name>objrun[i + 1].name) - для std::string name
if (strcmp(objrun[i].name, objrun[i + 1].name) > 0) - char name[MAX]

Добавлено через 2 минуты
Цитата Сообщение от glandeil Посмотреть сообщение
cin.getline(name,MAX);
Это убери
1
0 / 0 / 0
Регистрация: 27.05.2019
Сообщений: 5
28.05.2019, 22:09  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Объяви его std::string name, либо char name[MAX]

Добавлено через 1 минуту
И в сортировке
if (objrun[i].name>objrun[i + 1].name) - для std::string name
if (strcmp(objrun[i].name, objrun[i + 1].name) > 0) - char name[MAX]

Добавлено через 2 минуты

Это убери
ну надписи появились, только все равно выводит в самом обычном порядке
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
28.05.2019, 22:13
Цитата Сообщение от glandeil Посмотреть сообщение
ну надписи появились, только все равно выводит в самом обычном порядке
Смотри сортировку, она у тебя явно с ошибками
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.05.2019, 22:13
Помогаю со студенческими работами здесь

Множественное наследование
Добрый день, коллективный разум, прошу твоей помощи. Вопрос в следующем: как имея следующую структуру классов использующих множественное...

Множественное наследование - так ли это плохо?
Вопрос не в том, что это такое и пр. С момента изучения Си++ во всех книжках все авторы (кроме самого Страуструпа) пишут, что множественное...

Множественное наследование в С#
Можно ли в С# сделать что-то похожее на множественное наследование в C++?

Множественное наследование
// 4.1.cpp: главный файл проекта. #include &lt;stdafx.h&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;locale&gt; #include...

Множественное наследование
Имеется множественное наследование в виде треугольника. Если в обоих базовых классах имеются поля с одинаковым названием и смыслом, может...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru