Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
18 / 11 / 8
Регистрация: 04.01.2019
Сообщений: 43

Наследование С++

06.06.2020, 17:49. Показов 2305. Ответов 28

Студворк — интернет-сервис помощи студентам
Привет всем!
Буду очень рада помощи, не представляю, как всё это собрать, объединить и классы, и список.
Помогите, пожалуйста.

Само задание:

Создать класс CPoint – точка.
Обязательные поля класса:
• 2 значения типа int – координаты точки.
Обязательные методы:
• конструктор без параметров;
• конструктор с параметрами;
• изменение параметров объекта.
Описать производный от класса CPoint класс CLine – отрезок.
Обязательные методы:
• конструктор без параметров;
• конструктор с параметрами;
• изменение параметров объекта;
• вычисление длины отрезка;
• определение середины отрезка.
На основе класса CLine создать классы CTriangle и CTetragon – треугольник и
четырехугольник. Эти классы должны иметь методы для установки и получения
значений всех координат, вычисления периметра и площади, определения величины
сторон и углов, определение типа треугольника (равносторонний, равнобедренный,
разносторонний, прямоугольный, остроугольный, тупоугольный) и типа
четырёхугольника (квадрат, прямоугольник, параллелограмм, ромб, произвольный).
Для класса CTriangle определить функцию, определяющую являются ли 2
треугольника подобными. Для класса CTetragon определить функции, определяющие
возможность вписывания окружность в четырёхугольник описывания окружности
около четырёхугольника, определить центр и радиус этих окружностей.
Написать демонстрационную программу, в которой будет использоваться список
объектов этих классов в динамической памяти.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.06.2020, 17:49
Ответы с готовыми решениями:

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

Наследование шаблоном шаблона (наследование конструктора)
Всем привет! Думаю, что эта тема хоть и касается общих вопросов программирования, но будет уместна в данном разделе т.к. у различных...

Наследование интерфейса и наследование реализации
Начал читать книгу GoF и сразу же в предисловии попал в тупик. Чем отличается наследование интерфейса от наследования реализации? Что такое...

28
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,249
06.06.2020, 17:51
Вам помочь или все писать за Вас?
0
18 / 11 / 8
Регистрация: 04.01.2019
Сообщений: 43
06.06.2020, 18:06  [ТС]
FFPowerMan, можно помочь, подсказать) К сожалению, я остановилась в самом начале пути. Слишком много вопросов.

Например, вот определила я класс CPoint (точка):

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
class CPoint {
protected: 
    int x, y;
public:
    CPoint();
    CPoint(int X, int Y);
    ~CPoint();
    void set(int X, int Y);
    int get_x();
    int get_y();
 
};CPoint::CPoint() {
    x = y = 0;
}
 
CPoint::CPoint(int X, int Y){
    x = X; y = Y;
}
 
void CPoint::set(int X, int Y) {
    x = X; y = Y;
}
 
int CPoint::get_x() {
    return x;
}
 
int CPoint::get_y() {
    return y;
}
потом, как я понимаю, эту информацию нужно занести в список, создаём его

C++
1
list<string>all;
а как в него внести информацию?
(Взяла тип string, так как потом в этом список нужно будет вносить и текстовые данные)
0
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,249
06.06.2020, 18:17
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class CPoint
{
public:
    int x, y;
    CPoint()
    {
    }
    ~CPoint()
    {
    }
    CPoint(int d, int s): x(d), y(s)
    {
    }
};
Добавлено через 3 минуты
Такой просто класс незачем так сильно расписывать. Там Вам еще тучу чего надо написать.

Добавлено через 26 секунд
А зачем list?

Добавлено через 2 минуты
Вот так. Вам надо хорошенько подучить язык.
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
#include <iostream>
using namespace std;
 
class CPoint
{
public:
    int x, y;
    CPoint()
    {
    }
    ~CPoint()
    {
    }
    CPoint(int d, int s): x(d), y(s)
    {
    }
    
    void Set(int X, int Y)
    {
        x = X;
        y = Y;
    }
 
    int get_x()
    {
        return x;
    }
 
    int get_y()
    {
        return y;
    }
};
 
int main()
{
    CPoint p1;  
}
0
18 / 11 / 8
Регистрация: 04.01.2019
Сообщений: 43
06.06.2020, 18:25  [ТС]
FFPowerMan, не спорю, можно и так в духе минимализма, но как-то привыкла, что как минимум переменные либо в private относят, либо, как я думала, в этом случае, нужно для наследования использовать protected, в открытом доступе не советуют же держать.

Добавлено через 3 минуты
FFPowerMan, я просто расписала более развёрнуто, чем Вы. Ведь и правда только учу язык, пока нас учат отдельно объявлять методы и отдельно и описывать. list мне нужен по заданию, чтобы создать список объектов

Добавлено через 4 минуты
FFPowerMan, подскажите как координаты точки добавить в список?
0
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,249
06.06.2020, 19:30
У Вас будет список точек? Вам же линию еще надо создать?

Добавлено через 3 минуты
Если список точек, то так
C++
1
2
3
#include <list>
 
list<CPoint> Points;
Добавлено через 5 минут
При применении list нужно еще итераторы знать.
0
18 / 11 / 8
Регистрация: 04.01.2019
Сообщений: 43
06.06.2020, 20:28  [ТС]
FFPowerMan, а вот здесь уже начинаются вопросы. Так как Линия - производный класс класса Точка, то он должен как бы на нём основываться, значит, конструктор с параметрами должен строиться с помощью базового класса, у меня получается сделать это только для одного набора координат, наверное, можно сразу два набора "сконструировать"?

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
class CLine : public CPoint {
    float d, s;
protected:
    int x1, y1, x2, y2;
public:
    CLine();
    CLine(int X1, int Y1);
    ~CLine();
    void set(int X1, int Y1);
    int get_x1();
};
 
______________________
 
CLine::CLine():CPoint() {
    x1 = y1 = x2 = y2 = 0;
}
 
CLine::CLine(int X1, int Y1) : CPoint(x1,y1){
    x1 = X1; y1 = Y1;
}
 
void CLine::set(int X1, int Y1) {
    x1 = X1; y1 = Y1;
}
 
int CLine::get_x1() {
    return x1;
}
 
CLine::~CLine() {
}
0
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,249
06.06.2020, 20:37
Цитата Сообщение от Светлана_00 Посмотреть сообщение
Так как Линия - производный класс класса Точка,
- А вот это ошибка. "Линия" будет включать в себя 2 точки, НО не как не производный класс.
0
19496 / 10101 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
06.06.2020, 20:38
Цитата Сообщение от Светлана_00 Посмотреть сообщение
Так как Линия - производный класс класса Точка
Это же нонсенс. Линия содержит точки, а не является точкой.

public - наследование отображает отношение "является". Если вы для моделируемых сущностей A и B можете сказать "А является B", то используйте public-наследование, в противном случае - нет.
Например, в вашем случае Линия является Точкой - это абсурд, по крайней мере в школьной геометрии. А вот, Камаз является Автомобилем, тут все в порядке. Или, Круг является Геметрической Фигурой, тут тоже все в порядке.
0
18 / 11 / 8
Регистрация: 04.01.2019
Сообщений: 43
06.06.2020, 20:46  [ТС]
FFPowerMan, "Описать производный от класса CPoint класс CLine – отрезок." Я лишь повторяю слова задания

Добавлено через 4 минуты
FFPowerMan, DrOffset, Да, я читала уже такие же комментарии в подобных случаях, но если так говорится в задании, как мне сказать по-другому?
0
06.06.2020, 20:49

Не по теме:

Такое впечатление, что эти задания бот пишет, подставляя в шаблон сущности вроде как из одной области.

0
19496 / 10101 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
06.06.2020, 20:49
Светлана_00, или преподаватель проверяет вас "на вшивость" таким образом или задание просто некорректное.
Вообще печально, что молодежь учат таким убогим образом. Если это действительно серьезная формулировка, а не проверка, то похоже составитель сам не понимает зачем нужно наследование и как его использовать.
0
18 / 11 / 8
Регистрация: 04.01.2019
Сообщений: 43
06.06.2020, 20:52  [ТС]
DrOffset, Увы, но это реальное задание, которое мне необходимо сделать...
0
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,249
06.06.2020, 20:56
Цитата Сообщение от Светлана_00 Посмотреть сообщение
"Описать производный от класса CPoint класс CLine – отрезок."
- это бред.
0
18 / 11 / 8
Регистрация: 04.01.2019
Сообщений: 43
06.06.2020, 20:59  [ТС]
FFPowerMan, DrOffset, так как всё-таки можно создать конструктор с параметрами для класса отрезок/линия, используя класс точка?

Добавлено через 1 минуту
FFPowerMan, это наша система образования во всей красе
0
фрилансер
 Аватар для Алексей1153
6453 / 5654 / 1129
Регистрация: 11.10.2019
Сообщений: 15,054
06.06.2020, 21:13
Светлана_00, показываю, как бороться с такими тупыми преподами Наследование от точки? Да на здоровье! Наследуемся. Никак не используем точку? Ну да, ведь она там не нужна. Про использование в задании ничего не было

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
class CLine : public CPoint {
    float d, s;
protected:
    int x1, y1, x2, y2;
public:
    CLine();
    CLine(int X1, int Y1);
    ~CLine();
    void set(int X1, int Y1);
    int get_x1();
};
 
 
CLine::CLine(){
    x1 = y1 = x2 = y2 = 0;
}
 
CLine::CLine(int X1, int Y1) {
    x1 = X1; y1 = Y1;
}
 
void CLine::set(int X1, int Y1) {
    x1 = X1; y1 = Y1;
}
 
int CLine::get_x1() {
    return x1;
}
 
CLine::~CLine() {
}
Добавлено через 3 минуты
Светлана_00, с другой стороны, можно
int x1, y1, x2, y2;
заменить на
C++
1
2
CPoint p1;
CPoint p2;
это уже реально правильное использование класса "точка" в классе "линия"
0
19496 / 10101 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
06.06.2020, 21:16
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Наследуемся. Никак не используем точку?
Можно использовать, в принципе. Базовая точка - это середина отрезка.

Это все еще некорректно в целом, но по крайней мере объяснимо.

Кстати, тут достаточно сменить тип наследование на private, и мы даже уложимся в логику.
0
фрилансер
 Аватар для Алексей1153
6453 / 5654 / 1129
Регистрация: 11.10.2019
Сообщений: 15,054
06.06.2020, 21:19
Цитата Сообщение от DrOffset Посмотреть сообщение
сменить тип
чтобы случайно не использовать балласт
0
19496 / 10101 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
06.06.2020, 21:32
Цитата Сообщение от Светлана_00 Посмотреть сообщение
так как всё-таки можно создать конструктор с параметрами для класса отрезок/линия
Ответ на вопрос помечен комментарием "[ЗДЕСЬ]":
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
class CPoint {
    int x, y;
public:
    CPoint();
    CPoint(int X, int Y);
    ~CPoint();
    void set(int X, int Y);
    
    int get_x() const;
    int get_y() const;
 
};
CPoint::CPoint() : x(), y() {
}
 
CPoint::CPoint(int X, int Y) : x(X), y(Y){
}
 
CPoint::~CPoint() {
}
 
void CPoint::set(int X, int Y) {
    x = X;
    y = Y;
}
 
int CPoint::get_x() const {
    return x;
}
 
int CPoint::get_y() const {
    return y;
}
//------------------------------------------------------
class CLine 
    : private CPoint 
{
    CPoint m_a, m_b;
private:
    static CPoint center(CPoint a, CPoint b);
        
public:
    CLine();
    CLine(CPoint a, CPoint b);
    ~CLine();
    void set(CPoint a, CPoint b);
        
    CPoint center() const;  
};
 
 
CLine::CLine() 
    : CPoint(), m_a(), m_b() {
}
 
CLine::CLine(CPoint a, CPoint b) // [ЗДЕСЬ]
    : CPoint(center(a, b)), m_a(a), m_b(b) {
}
 
CPoint CLine::center(CPoint a, CPoint b) {
    return CPoint((a.get_x() + b.get_x()) / 2, (a.get_y() + b.get_y()) / 2);
}
 
void CLine::set(CPoint a, CPoint b) {
    m_a = a;
    m_b = b;
    CPoint c = center(a, b);
    CPoint::set(c.get_x(), c.get_y());
}
 
CPoint CLine::center() const {
    return *this;
}
 
CLine::~CLine() {
}
Это вместе с пунктом,
Цитата Сообщение от Светлана_00 Посмотреть сообщение
определение середины отрезка.
1
18 / 11 / 8
Регистрация: 04.01.2019
Сообщений: 43
06.06.2020, 21:40  [ТС]
DrOffset, интересно как получилось... спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.06.2020, 21:40
Помогаю со студенческими работами здесь

Наследование С# , наследование полей
В классе есть приватное ПОЛЕ . Мне нужно использовать его в классе потомке . Можно это не сделать не делая поле публичным .

Наследование от IEnumerator<T>: как предотвратить наследование IEnumerator
Создаю перечислитель и наследую от IEnumerator&lt;T&gt;, а он, зараза, наследует IEnumerator (который без типа). И в итоге он требует от меня...

наследование
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;string&gt; #include &lt;vector&gt; #include &lt;windows.h&gt; using namespace std; class...

Наследование
Создайте пример, демонстрирующий синтаксис вызова в одном из методов класса др. метода этого же класса, а так же переопределите в этом...

Наследование C#
Наследование в c# работает только в одну сторону? Тоесть если один класс унаследован от другого то мы можем применять методы первого для...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru