0 / 0 / 0
Регистрация: 03.12.2021
Сообщений: 6

Нужно создать иерархию классов с использованием подражания (Наследование)С++

03.12.2021, 11:33. Показов 1941. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно создать иерархию классов с использованием подражания. В каждой программе необходимо соблюдать принцип разделения интерфейса и реализации класса (т.е. не забывайте создавать заголовочные файлы). В каждом варианте необходимо написать программу, демонстрирующую применение всех методов ваших классов. Перед написанием программ, продумайте (или уточните у преподавателя), какие функции необходимы в каждом из классов (возможно, где необходимо считать координаты, где рассчитать площади и объемы, а где хранить фамилии и годы поступления): как в базовом, так и в дочерних классах. Также продумайте, что следует поместить в закрытые (а возможно защищенные) переменные. Предусмотрите возможность переопределения методов базового класса в дочернем. Приветствуется демонстрация подражания перегруженным операциям.
Вариант: Точка -> Четырехугольник -> Параллелепипед.

Буду очень благодарен!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2021, 11:33
Ответы с готовыми решениями:

Студенческая библиотека. Создать иерархию классов чтобы использовалась инкапсуляция подражания полиморфизм
Тема:Студенческая библиотека Информационный объект пользователь библиотеки Имя__________________текст___________________ Имя ...

Создать иерархию классов представляющих простое наследование
Создать иерархию классов представляющих простое наследование. Базовый класс – матрица (динамическая (int **mt или int* или int *mt)). ...

Создать иерархию классов представляющих простое наследование
Создать иерархию классов представляющих простое наследование. Базовый класс – вектор (числовой динамический массив (int *)). Производный...

7
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
05.12.2021, 18:49
Цитата Сообщение от uginn Посмотреть сообщение
иерархию классов с использованием подражания
Цитата Сообщение от uginn Посмотреть сообщение
Приветствуется демонстрация подражания перегруженным операциям
Расскажите мне, пожалуйста, что за "подражание"? Не знаком с термином.

Цитата Сообщение от uginn Посмотреть сообщение
Точка -> Четырехугольник -> Параллелепипед
В такой иерархии наследование неуместно. Аггрегация подойдёт?
0
0 / 0 / 0
Регистрация: 03.12.2021
Сообщений: 6
06.12.2021, 01:46  [ТС]
Да, подойдет!

Добавлено через 5 минут
Аггрегацию . Я так хотел написать..

Добавлено через 5 минут
Подражание не нужно, это я уже намудрил, а отредактировать тему не могу. Нужно Наследование
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
06.12.2021, 02:11
Цитата Сообщение от uginn Посмотреть сообщение
Нужно Наследование
С наследованием не могу.
Наследование это отношение типа "является" и "ведёт себя как".

Точка не является четырехугольником или параллелепипедом.
Четырехугольник не является ни точкой ни параллелепипедом.
Параллелепипед не является ни четырехугольником ни точкой.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
06.12.2021, 03:02
Тут проблема в том, что в представленной последовательности используется не наследование, а понятие "состоит из". параллелепипед состоит из 6 прямоугольников (граней), 12 отрезков (рёбер) или 8 точек. Это к наследованию отношения не имеет, это поля класса.

Наследование это движение от общего к частному, но когда меняется только один или несколько вспомогательных признаков, наподобие иерархии "четырёхугольник - трапеция - прямоугольник - квадрат". При этом может быть и вариант "четырёхугольник - ромб - квадрат", когда наследование выбирается исходя из другого набора признаков и несовместимо с первым вариантом.
0
0 / 0 / 0
Регистрация: 03.12.2021
Сообщений: 6
06.12.2021, 22:07  [ТС]
То есть никак не получиться сделать?

Добавлено через 3 минуты
А можете написать как можно сделать кодом, я потом если что переделаю?
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
07.12.2021, 00:19
Лучший ответ Сообщение было отмечено uginn как решение

Решение

Цитата Сообщение от uginn Посмотреть сообщение
То есть никак не получиться сделать?
Нет в задаче моделей, среди которых можно построить наследование.

Цитата Сообщение от uginn Посмотреть сообщение
А можете написать как можно сделать кодом, я потом если что переделаю?
Ох чёт я сомневаюсь, что переделаете.

Попробую простенько-простенько.
Тут нет одной проверки на параллелепипедность, мне было уже лениво.
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
#include <iostream>
 
// отсюда можно код убрать в Point.h
#include <cmath>
#include <iomanip>
 
struct Point {
    const double x;
    const double y;
    const double z;
};
 
Point move(const Point &p, const Point &delta) {
    return {p.x + delta.x, p.y + delta.y, p.z + delta.z};
}
 
double distance(const Point &a, const Point &b) {
    double dx = a.x - b.x;
    double dy = a.y - b.y;
    double dz = a.z - b.z;
    return std::sqrt(dx * dx + dy * dy + dz * dz);
}
 
Point middle(const Point &a, const Point &b) {
    return {(a.x + b.x) / 2., (a.y + b.y) / 2., (a.z + b.z) / 2.};
}
 
std::ostream &operator<<(std::ostream &out, const Point &p) {
    return out << std::fixed << std::setprecision(2) << "[" << p.x << ", " << p.y << ", " << p.z << "]";
}
 
// посюда
 
// отсюда можно код убрать в файл Quadrilateral.h
// раскоментировав инклуд пойнта:
// #include "Point.h"
 
struct Quadrilateral {
    const Point a;
    const Point b;
    const Point c;
    const Point d;
};
 
std::ostream &operator<<(std::ostream &out, const Quadrilateral &q) {
    return out << "Quadrilateral{" <<
               "a=" << q.a << ", b=" << q.b << ", c=" << q.c << ", d=" << q.d << "}";
}
 
Quadrilateral move(const Quadrilateral &q, const Point &p) {
    double dx = p.x - q.a.x;
    double dy = p.y - q.a.y;
    double dz = p.z - q.a.z;
    return Quadrilateral{
            move(q.a, {dx, dy, dz}),
            move(q.b, {dx, dy, dz}),
            move(q.c, {dx, dy, dz}),
            move(q.d, {dx, dy, dz})
    };
}
 
double epsilon = 0.000001;
 
bool isParallelogram(const Quadrilateral &q) {
    double ab = distance(q.a, q.b);
    double cd = distance(q.c, q.d);
    if (std::fabs(ab - cd) >= epsilon) {
        return false;
    }
 
    double bc = distance(q.b, q.c);
    double da = distance(q.d, q.a);
    if (std::fabs(bc - da) >= epsilon) {
        return false;
    }
 
    Point mac = middle(q.a, q.c);
    Point mbd = middle(q.b, q.d);
 
    return std::fabs(mac.x - mbd.x) < epsilon ||
           std::fabs(mac.y - mbd.y) < epsilon ||
           std::fabs(mac.z - mbd.z) < epsilon;
}
 
// посюда
 
// отсюда можно код убрать в файл Parallelepiped.h
// раскоментировав инклуд пойнта и четырехугольника:
// #include "Point.h"
// #include "Quadrilateral.h"
 
struct Parallelepiped {
    const Quadrilateral a;
    const Quadrilateral b;
 
    Parallelepiped(const Quadrilateral &base, const Point &top) : a(base), b(move(base, top)) {
        if (!isParallelogram(base)) {
            throw std::invalid_argument("quadrangle must be a parallelogram");
        }
    }
};
 
std::ostream &operator<<(std::ostream &out, const Parallelepiped &p) {
    return out << "Parallelepiped{" << "a=" << p.a << ", b=" << p.b << "}";
}
 
// посюда
// тут можно включить инклуд параллелепипеда, чтоб заработало
//#include "Parallelepiped.h"
 
int main() {
    Quadrilateral q{{0, 0, 0},
                    {0, 1, 0},
                    {1, 0, 0},
                    {1, 1, 0}};
 
    Parallelepiped p{q, {1, 1, 1}};
 
    std::cout << p << std::endl;
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 03.12.2021
Сообщений: 6
07.12.2021, 17:36  [ТС]
Спасибо огромное, я обязательно переделаю, сказал же!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.12.2021, 17:36
Помогаю со студенческими работами здесь

Создать иерархию классов представляющих простое наследование
Создать иерархию классов представляющих простое наследование. Базовый класс – вектор (числовой динамический массив (int *)). Производный...

Создать иерархию классов представляющих простое наследование
Создать иерархию классов представляющих простое наследование. Базовый класс – матрица (динамическая (int **mt или int* или int *mt)). ...

Создать иерархию классов представляющих простое наследование
Ребята, необходимо решить 2 задачки. класс должен включать в себя : - компоненты данные - методы: а) конструктор по умолчанию; ...

Создать иерархию классов представляющих простое наследование
Создать иерархию классов представляющих простое наследование. Базовый класс – строка символов (char *). Производный класс – методы,...

Необходимо создать иерархию классов представляющих простое наследование
Необходимо создать иерархию классов представляющих простое наследование. Базовый класс – строка символов (char *). Производный класс –...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub Примеры вызова: # Указанная валюта 'EUR' floatrates-rub -Code 'EUR' # Список имеющихся кодов валют floatrates-rub -Available function floatrates-rub {
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5 Примеры вызова Get-WeatherRP5rss с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr Примеры вызова: Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) { $url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js' $data = Invoke-RestMethod -Uri $url $esc = 27 . . .
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru