С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 17.10.2022
Сообщений: 13
1

Наследование классов

07.05.2023, 23:45. Показов 617. Ответов 2

Author24 — интернет-сервис помощи студентам
Здравствуйте! Делаю лабораторную работу (по примеру, так как пока только новичок и не все понимаю), возникла проблема (фото в самом низу).

Задание: разработать базовый класс. В базовый класс следует
включить свойства и методы, общие для заданных классов ­наследников. Базовый класс
должен включать в себя не менее двух свойств и двух методов, один из которых –
виртуальная функция.
2. Разработать классы, производные от базового класса (наследники). Классы ­наследники
должны наследовать от базового класса хотя бы одно свойство, а также должны иметь хотя
бы одно собственное свойство. В классы­ наследники должны быть включены следующие
методы:
a. Метод, наследуемый от базового класса без переопределения.
b. Виртуальная функция базового класса, переопределённая в производном классе.
c. Собственные методы производного класса. В состав производного класса должен
быть включён хотя бы один метод, изменяющий какое-­либо свойство класса.
3. Разработать программу, выполняющую следующие действия:
a. Создание нескольких объектов на основе классов–наследников.
b. Объединение объектов в массив (массив указателей на базовый класс).
c. Отображение значений свойств объектов на экране в цикле.
d. Изменение свойств объектов по номеру элемента массива.
e. Вычисление заданного параметра.
f. Выход из программы.
4. Объявление и реализацию каждого класса поместить в отдельный модуль.
5. Действия над объектами (просмотр, изменение, вычисление параметра
) должны быть доступны через меню; последовательность выполнения действий –
произвольная, в цикле.

Базовый класс: Товар. Производные классы: Одежда и Продукты питания. Вычисляемый параметр: Сумма покупки.

Вот код:
main.cpp:
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
#include <iostream>
#include "Tovar.h"
#include "Clothes.h"
#include "Food.h"
#include <Windows.h>
using namespace std;
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int change = 1;
    int x = 0;
    int j = 0;
    int v = 0;
    int p, sum, k;
    string ca, co, n;
    Clothes t1("Dress", "Red", 5000);
    Clothes t2("Socks", "White", 500);
    Food v1("Syrniki", 206, 150);
    Food v2("Milk", 39, 80);
    Tovar* tovar[4];
    int i;
    tovar[0] = &t1;
    tovar[1] = &t2;
    tovar[2] = &v1;
    tovar[3] = &v2;
    for (i = 0;i < 4;i++) tovar[i]->Show();
    sum = (*(tovar + 0))->getPrice();
    for (i = 0;i < 4;i++)
    {
            sum += (*(tovar + i))->getPrice();
    }
    cout << "Сумма покупки = " << sum << endl;
    while (change)
    {
        cout << "Выберите, что вы хотите изменить.\n1-Одежда.\n2-Продукты питания.\n3-Выход" << endl;
        cin >> x;
        switch (x)
        {
        case 1:
            cout << "Выберите, пожалуйста, какую одежду хотите изменить : 1 или 2" << endl;
            cin >> j;
            while (j != 1 && j != 2)
            {
                cout << "Значение выходит за допустимый предел" << endl;
                cin >> j;
            }
            cout << "Введите новые характеристики Одежды:" << endl;
            cout << "Введите категорию одежды" << endl;
            cin >> ca;
            cout << "Введите цвет одежды" << endl;
            cin >> co;
            cout << "Введите цену" << endl;
            cin >> p;
            tovar[j - 1]->setCategory(ca);
            tovar[j - 1]->setColor(co);
            tovar[j - 1]->setPrice(p);
            for (i = 0;i < 4;i++) tovar[i]->Show();
            for (i = 0;i < 4;i++)
            {
                sum += (*(tovar + i))->getPrice();
            }
            cout << "Сумма покупки = " << sum << endl;
            break;
        case 2:
            cout << "Выберите,пожалуйста, какой продукт хотите изменить  : 1 или 2" << endl;
            cin >> v;
            while (v != 1 && v != 2)
            {
                cout << "Значение выходит за допустимый предел" << endl;
                cin >> v;
            }
            cout << "Введите новые характеристики продукта питания:" << endl;
            cout << "Введите названия продукта" << endl;
            cin >> n;
            cout << "Введите ккалории" << endl;
            cin >> k;
            cout << "Введите цену" << endl;
            cin >> p;
            tovar[v + 1]->setName(n);
            tovar[v + 1]->setKkalori(k);
            tovar[v + 1]->setPrice(p);
            for (i = 0;i < 4;i++) tovar[i]->Show();
            for (i = 0;i < 4;i++)
            {
                sum += (*(tovar + i))->getPrice();
            }
            cout << "Сумма покупки = " << sum << endl;
            break;
        case 3:
            change = 0;
            break;
        default:
            cout << "Вы ввели неверное значение" << endl;
            break;
        }
    }
    return 0;
}
Tovar.h:
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
#ifndef TOVAR_H_INCLUDED
#define TOVAR_H_INCLUDED
 
#include <string>
 
using namespace std;
 
class Tovar
{
public:
    Tovar();
    void setBrand(string);
    void setPrice(float);
    void setWeight(int);
    int getPrice();
    void Show();
    virtual void setColor(string);
    void setCategory(string);
    void setName(string);
    void setKkalori(float);
protected:
    string Brand;
    int Price;
    int Weight;
    string Color;
    string Category;
    string Name;
    float Kkalori;
};
 
#endif // TOVAR_H_INCLUDED
Tovar.cpp:
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
#include <iostream>
#include "Tovar.h"
 
using namespace std;
 
Tovar::Tovar() {}
void Tovar::setBrand(string b)
{
    Brand = b;
}
void Tovar::setPrice(float p)
{
    Price = p;
}
void Tovar::setWeight(int w)
{
    Weight = w;
}
void Tovar::setColor(string Co)
{
    Color = Co;
}
void Tovar::setCategory(string Ca)
{
    Category = Ca;
}
void Tovar::setName(string N)
{
    Name = N;
}
void Tovar::setKkalori(float K)
{
    Kkalori = K;
}
int Tovar::getPrice()
{
    return Price;
}
void Tovar::Show()
{
    cout << "b " << Brand << "p " << Price << "w " << Weight << endl;
}
Clothes.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include "Tovar.h"
 
#ifndef CLOTHES_H_INCLUDED
#define CLOTHES_H_INCLUDED
 
 
using namespace std;
 
class Clothes : public Tovar
{
public:
    Clothes(string, string, int);
    void setCategory(string);
    void setColor(string);
    void setPrice(int);
    void Show();
private:
    string Category;
    string Color;
    int Price;
};
#endif // CLOTHES_H_INCLUDED
Clothes.cpp:
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
#include "Clothes.h"
#include <iostream>
 
using namespace std;
Clothes::Clothes(string Ca, string Co, int P)
{
    Price = P;
    Category = Ca;
    Color = Co;
}
void Clothes::setCategory(string Ca)
{
    Category = Ca;
}
void Clothes::setPrice(int P)
{
    Price = P;
}
void Clothes::setColor(string Co)
{
    Color = Co;
}
void Clothes::Show()
{
    cout << "Category: " << Category << " Color: " << Color << " Price: " << Price << endl;
}
Food.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include "Tovar.h"
 
#ifndef FOOD_H_INCLUDED
#define FOOD_H_INCLUDED
 
 
using namespace std;
 
class Food : public Tovar
{
public:
    Food(string, float, int);
    void setName(string);
    void setKkalori(float);
    void setPrice(int);
    void Show();
private:
    string Name;
    float Kkalori;
    int Price;
};
#endif // FOOD_H_INCLUDED
Food.cpp:
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
#include "Food.h"
#include <iostream>
 
using namespace std;
Food::Food(string N, float K, int P)
{
    Price = P;
    Name = N;
    Kkalori = K;
}
void Food::setName(string N)
{
    Name = N;
}
void Food::setPrice(int P)
{
    Price = P;
}
void Food::setKkalori(float K)
{
    Kkalori = K;
}
void Food::Show()
{
    cout << "Name: " << Name << " Kalori: " << Kkalori << " Price: " << Price << endl;
}
Миниатюры
Наследование классов  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.05.2023, 23:45
Ответы с готовыми решениями:

Автоматическая генерация классов С ++ с UML диаграмм классов. Наследование в с++. Абстрактные классы. WhiteStarUML
Создать классовую модель(желательно в WhiteStarUML), которая включает в себя абстрактный класс...

Заменить наследование классов на наследование интерфейсов
#include &lt;iostream&gt; #include &lt;assert.h&gt; using namespace std; int people_on_base = 100; int...

Наследование классов. Копирование производных классов
Здравствуйте всем, у меня такой вопрос: написал код #include &quot;stdafx.h&quot; class A //Создаем...

Наследование классов!
Помогите с задачей!немного закрутила Описать класс студент,который содержит инфу о студенте с...

Наследование классов
Здравствуйте, имеется код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;ctime&gt; using...

2
79 / 60 / 22
Регистрация: 14.12.2022
Сообщений: 240
07.05.2023, 23:58 2
отличное фото. зря ты паришься
0
Модератор
Эксперт С++
13723 / 10920 / 6478
Регистрация: 18.12.2011
Сообщений: 29,150
08.05.2023, 09:16 3
Лучший ответ Сообщение было отмечено chimeow как решение

Решение

Класс Товар:
Цитата Сообщение от chimeow Посмотреть сообщение
protected:
string Brand;
int Price;
int Weight;
string Color;
string Category;
string Name;
float Kkalori;
Класс Clother
Цитата Сообщение от chimeow Посмотреть сообщение
private:
string Category;
string Color;
int Price;
Т.е. атрибуты Category, Color, Price
присутствуют в двух экземплярах.
Аналогично
Для класса Food:
Цитата Сообщение от chimeow Посмотреть сообщение
private:
string Name;
float Kkalori;
int Price;
тоже в двух экземплярах.

p.s. о стиле программирования....
1. С какого перепугу класс Tovar должен знать о каких-то килокалориях у платья или о цвете сырников.
2. Конструкторы должны инициализировать все данные производного класса и вызывать нужный конструктор базового класса.
1
08.05.2023, 09:16
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.05.2023, 09:16
Помогаю со студенческими работами здесь

Наследование классов
Здравствуйте, извините за глупый вопрос, но у меня проблема в следующем: Имеется базовый класс ...

Наследование классов
никак не разберусь с наследованием, у нас тут в методичке дана по нему общая инфа, надо сделать как...

Наследование классов в С++
Наследование классов в С++ Здравствуйте, нужна помощь в написании программы, может кто - нибудь...

Наследование классов
Здравствуйте, начал изучать наследование классов и не могу понять как ведут себя конструкторы с...

Наследование классов
Всем привет! У меня проблема. Вот задание: 1. Разработать следующие классы: • базовый класс...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Блоги программистов
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­хро­н­н­ы­й счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru