Содержание
Цель работы
Изучить одну из базовых концепций ООП — наследование классов в С++, заключающуюся в построении цепочек классов, связанных иерархически. Познакомиться с механизмом виртуальных функций.
Общая постановка
Программа должна содержать:
- базовый класс $X$, включающий два элемента $x1$, $x2$ типа int;
- конструктор с параметрами для создания объектов в динамической области памяти;
- деструктор;
- виртуальные методы просмотра текущего состояния и переустановки объектов базового класса в новое состояние.
Производный класс $Y$, включающий один элемент $y$ типа int:
- конструктор с параметрами и списком инициализаторов, передающий данные конструктору базового класса;
- переопределенные методы просмотра текущего состояния объектов и их переустановки в новое состояние.
Индивидуальные задания
Создать в производном классе метод Run, определяющий:
№ | Условие |
1 | Сумму компонент классов. |
2 | Произведение компонент классов. |
3 | Сумму квадратов компонент классов. |
4 | Значение $x_1 + x_2 — y$. |
5 | Значение $\frac{x_1 + x_2}{y}$. |
6 | Значение $(x_1 + x_2) \cdot y$. |
7 | Значение $x_1 \cdot y + x_2$. |
8 | Значение $x_1 + x_2 \cdot y$. |
9 | Произведение квадратов компонент классов. |
10 | Значение $x_1 \cdot x_2 + y$. |
11 | Значение $x_1 \cdot \frac{x_2}{y}$. |
12 | Значение $x_1 \cdot x_2 — y$. |
13 | Значение $(x_1 — x_2) \cdot y$. |
14 | Значение $\frac{x_1 — x_2}{y}$. |
15 | Значение $\frac{x_1}{y} — x_2$. |
Программа должна продемонстрировать работу конструкторов базового и производного классов, начальное значение задается конструкторами, а переустановка их в новое состояние производится методами классов через косвенную адресацию.
Образец выполнения (вариант №1)
Условие задания звучит так:
Сумму компонент классов.
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 | #include <iostream> // для консольного вывода #include <clocale> // для руссификации диалогов using namespace std; // описание базового класса class X { protected: int x1, x2; public: // параметрический конструктор X(const int px1, const int px2) { this->x1 = px1; this->x2 = px2; } // виртуальная функция вывода элемент-данных virtual void Print(void) { cout << "x1 = " << this->x1 << endl << "x2 = " << this->x2 << endl; } // виртуальная функция переустановки элемент-данных virtual void Set(const int px1, const int px2) { this->x1 = px1; this->x2 = px2; } }; // описание производного класса class Y: public X { private: int y; public: // параметрический конструктор, имеющий инициализаторы для базового класса Y(const int px1, const int px2, const int py): X(px1, px2) { this->y = py; } // вывод элемент-данных на экран virtual void Print(void) { cout << "y = " << this->y << endl; } // переустановка элемент-данных virtual void Set(const int py) { this->y = py; } // нахождение суммы компонент классов int Run(void) { return (this->x1 + this->x2 + this->y); } }; // главная функция проекта (точка входа) int main(void) { setlocale(LC_ALL, "rus"); // руссификация диалогов в программе Y y(1, 2, 3); // объявление объекта производного класса y.Print(); // вывод значения y на экран ((X)y).Print(); // через косвенную адресацию вывод значений x1, x2 y.Set(-3); // изменение значения y y.Print(); // вывод измененного значения y на экран // нахождение суммы компонент класов и вывод результата на экран cout << endl << "Сумма компонент классов: x1 + x2 + y = " << y.Run() << endl; cin.get(); // задержка программы, чтобы можно было просмотреть результат return 0; // завершение работы программы и передача управления в ОС } |
Результаты работы программы
Стоимость заказа работы своего варианта
➡ Стоимость программы из любого варианта составляет $250$ рублей.
Для оформления заказа пишите на почту: proglabs@mail.ru.
Время нашего ответа обычно составляет не более $10$ минут.
Добавить комментарий