Пример. Цель работы: приобрести навыки в использовании простого наследования и полиморфизма

ПРОСТОЕ НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ

 

Цель работы: приобрести навыки в использовании простого наследования и полиморфизма.

 

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

 

Пример.

Условие задачи.Создать базовый класс «эллипс», описав в нем функции ввода параметров, вывода их на экран, нахождения площади эллипса. Породить от него класс «цветной эллипс», переопределив функции ввода и вывода параметров.

 

//файл classes.h

class Ellipse

{

protected: //a и b должны быть напрямую доступны для класса-потомка

int a,b;

public:

Ellipse();

virtual void EnterParam(); //ввод параметров

virtual void DisplayParam(); //вывод параметров

double Area(); //нахождение площади; невиртуальная, так как не переопределяется в классе-потомке

};

 

class ColorEllipse: public Ellipse

{

char color[40];

public:

ColorEllipse();

virtual void EnterParam();

virtual void DisplayParam();

};

 

//файл classes.cpp

 

#include "classes.h"

#include <stdio.h>

#include <string.h>

#define M_PI 3.14159265358979323846

 

Ellipse::Ellipse()

{

a=1;

b=1;

}

 

void Ellipse::EnterParam()

{

int er;

do

{

printf("Введите длину первой полуоси: ");

er=scanf("%d",&a);

if(a<=0 || er==0)

printf("Ошибка!!! Повторите ввод! \n");

fflush(stdin);

}

while(a<=0 || er==0);

do

{

printf("Введите длину второй полуоси: ");

er=scanf("%d",&b);

if(b<=0 || er==0)

printf("Ошибка!!! Повторите ввод! \n");

fflush(stdin);

}

while(b<=0 || er==0);

}

 

void Ellipse::DisplayParam()

{

printf("Длины полуосей: a=%d b=%d \n", a,b);

}

 

double Ellipse::Area()

{

return M_PI*a*b;

}

 

ColorEllipse::ColorEllipse()

{

strcpy(color,"Красный");

}

 

void ColorEllipse::EnterParam()

{

Ellipse::EnterParam();

printf("Введите цвет эллипса: ");

scanf("%s",color);

 

}

 

void ColorEllipse::DisplayParam()

{

Ellipse::DisplayParam();

printf("Цвет эллипса: %s\n",color);

}

 

//файл mainfile.cpp

 

#include "classes.h"

#include <stdio.h>

#include <conio.h>

#include <locale.h>

 

int main()

{

Ellipse el;

ColorEllipse colel;

Ellipse *pel; //указатель нужен для реализации полиморфизма

int key1,key2;

setlocale(0,"RUS"); // обеспесиваем вывод в консольное окно символов кириллицы

do //выбирвем вид эллипса

{

printf("\n1 - обычный эллипс\n");

printf("2 - цветной эллипс\n");

printf("ESC - выход\n");

printf("Ваш выбор: \n");

key1=getch();

switch(key1)

{

case '1':

pel=&el;

break;

case '2':

pel=&colel;

break;

}

if (key1!=27)

{

do //выбираем действие для выбранного типа эллипса

{

printf("\n1 - ввод параметров\n");

printf("2 - вывод параметров\n");

printf("3 - посчитать площадь\n");

printf("ESC - выход\n");

printf("Ваш выбор: \n");

key2=getch();

switch(key2)

{

case '1': pel->EnterParam(); break;

case '2': pel->DisplayParam(); break;

case '3': printf("Площадь равна: %.2lf\n",pel->Area());

break;

}

}

while(key2!=27);

}

}

while(key1!=27);

return 0;

}

 

Содержание отчёта

 

1. Титульный лист.

2. Условие лабораторной работы.

3. Текст программы.

4. Экранные формы с примерами работы программы.

 

Варианты заданий.

1. Создать базовый класс «треугольник», описав в нём функции задания параметров треугольника, вывода их на экран, нахождения периметра и площади. Породить от него класс «прямоугольный треугольник», переопределив функции задания параметров и нахождения площади. Треугольник задается длинами сторон. При вводе параметров обязательно обеспечить проверку на существование треугольника. При задании параметров для объекта класса «прямоугольный треугольник» проверить, действительно ли задан прямоугольный треугольник.

 

2. Создать базовый класс «многоугольник», описав в нём функции задания количества и длин сторон, вывода параметров многоугольника на экран, нахождения периметра. Породить от него класс «правильный многоугольник» с числом вершин 3<=N<=6, переопределив в нём функции задания количества и длин сторон и нахождения периметра.

 

3. Создать базовый класс «отрезок», описав в нем функции задания параметров отрезка, вывода их на экран, нахождения длины отрезка. Породить от него класс «цветной отрезок», переопределив в нем функции задания параметров отрезка и вывода их на экран.

 

4. Создать базовый класс «треугольник», описав в нём функции задания параметров треугольника, вывода их на экран, нахождения периметра и площади. Породить от него класс «равнобедренный треугольник», переопределив функции задания параметров треугольника и нахождения площади. Треугольник задается длинами сторон. При вводе параметров обязательно обеспечить проверку на существование треугольника.

 

5. Создать базовый класс «список», определив в нем функции добавления в начало списка, удаления N-го элемента списка, вывода элементов списка на экран. Породить от него класс «упорядоченный список», переопределив функцию добавления элемента списка.

 

6. Создать базовый класс «таблица» из N*N полей, определив в нем функции добавления элемента в таблицу, удаление элемента из таблицы по значению, вывод таблицы на экран. Породить от него класс «упорядоченная таблица», переопределив функцию добавления элементов.

 

7. Создать базовый класс «прямоугольник», определив в нем функции ввода параметров прямоугольника, вывода их на экран и нахождения площади. Породить от него класс «квадрат», переопределив функции ввода параметров и нахождения площади.

 

8. Создать базовый класс «треугольник», описав в нём функции задания параметров треугольника, вывода их на экран, нахождения периметра и площади. Породить от него класс «правильный треугольник», переопределив функции ввода параметров, нахождения площади и периметра. Треугольник задается длинами сторон. При вводе параметров обязательно обеспечить проверку на существование треугольника.

 

9. Создать базовый класс «матрица1», описав в нем функции ввода матрицы с клавиатуры, вывода ее на экран и нахождения суммы элементов матрицы. Породить от него класс «матрица2», переопределив в нем функцию ввода матрицы таким образом, чтобы значения элементов матрицы загружались из файла.

 

10. Создать базовый класс «квадрат1», описав в нем функции ввода параметров квадрата с клавиатуры, вывода их на экран, перемещения квадрата влево и вправо по нажатию клавиш «стрелка влево» и «стрелка вправо». Породить от него класс «квадрат2», переопределив функции нажатия клавиш «стрелка влево» и «стрелка вправо» таким образом, чтобы они выполняли поворот квадрата влево и вправо. Квадрат задается координатой верхнего левого угла и длиной стороны. Выводится на экран должны координаты всех четырех вершин квадрата.

 

11. Создать базовый класс «массив1», описав в нём функции добавления, удаления, вывода на экран и подсчета количества ненулевых элементов массива. Породить от него класс «массив2», переопределив функцию удаления элемента массива таким образом, чтобы, если удаляемый элемент равен нулю, то обнулялись соседние с ним элементы.

 

12. Создать базовый класс «массив», описав в нём функции добавления, удаления, вывода на экран и подсчета суммы положительных элементов массива. Породить от него класс «упорядоченный массив», переопределив функцию добавления элементов массива.

 

13. Создать базовый класс «матрица», описав в нем функции добавления элементов в матрицу и вывода их на экран. Породить от него классы «единичная матрица» и «верхняя треугольная матрица», переопределив в них функцию добавления элементов.

 

14. Создать базовый класс «треугольник1», описав в нем функции ввода параметров треугольника с клавиатуры, вывода их на экран, перемещения треугольника влево и вправо по нажатию клавиш «стрелка влево» и «стрелка вправо». Породить от него класс «треугольник2», переопределив функции нажатия клавиш «стрелка влево» и «стрелка вправо» таким образом, чтобы они выполняли поворот треугольника влево и вправо. Треугольник задается координатами его вершин.

 

15. Создать базовый класс «цилиндр», описав в нём функции ввода параметров, вывода их на экран и нахождения объёма цилиндра. Породить от него класс «цилиндр1», который представляет собой фигуру, являющуюся цилиндром, разрезанным плоскостью, проходящей через ось цилиндра. Переопределить в классе «цидиндр1» функцию нахождения объёма фигуры.

 

16. Создать базовый класс «конус», описав в нём функции ввода параметров, вывода их на экран, нахождения объёма конуса и площади его нижнего основания. Породить от него класс «усеченный конус», переопределив в нем функции ввода и вывода параметров и нахождения объёма фигуры.

 

17. Создать базовый класс «параллелограмм», определив в нем функции ввода параметров параллелограмма, вывода их на экран и нахождения площади. Породить от него класс «ромб», переопределив функции ввода параметров и нахождения площади.

 

18. Создать базовый класс «матрица», описав в нем функции добавления элементов в матрицу и вывода их на экран. Породить от него классы «единичная матрица» и «нижняя треугольная матрица», переопределив в них функцию добавления элементов.

 

19. Создать базовый класс «параллелограмм», описав в нем функции ввода параметров, вывода их на экран, нахождения периметра параллелограмма. Породить от него класс «цветной параллелограмм», переопределив функции ввода и вывода параметров.

 

20. Создать базовый класс «массив1», описав в нем функции ввода массива с клавиатуры, вывода его на экран и нахождения произведения элементов массива. Породить от него класс «массив2», переопределив в нем функцию ввода массива таким образом, чтобы значения элементов массива загружались из файла.

 

21. Создать базовый класс «призма», описав функции ввода параметров, вывода их на экран и нахождения объема призмы. Породить от неё класс «параллелепипед», переопределив функции ввода параметров и нахождения объёма.

 

22. Создать базовый класс «прямоугольник1», описав в нем функции ввода параметров прямоугольника с клавиатуры, вывода их на экран, перемещения прямоугольника влево и вправо по нажатию клавиш «стрелка влево» и «стрелка вправо». Породить от него класс «прямоугольник2», переопределив функции нажатия клавиш «стрелка влево» и «стрелка вправо» таким образом, чтобы они выполняли поворот прямоугольника влево и вправо. Прямоугольник задается координатами верхнего левого и правого нижнего углов. Выводится на экран должны координаты всех четырех вершин прямоугольника.

 

23. Создать базовый класс «прямоугольник», описав в нем функции ввода параметров, вывода их на экран, нахождения площади прямоугольника. Породить от него класс «цветной прямоугольник», переопределив функции ввода и вывода параметров.