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

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

07.05.2023, 23:45. Показов 588. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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
55 / 60 / 22
Регистрация: 14.12.2022
Сообщений: 240
07.05.2023, 23:58 2
отличное фото. зря ты паришься
0
Модератор
Эксперт С++
13690 / 10895 / 6470
Регистрация: 18.12.2011
Сообщений: 29,077
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2023, 09:16
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru