
- •Раздел 1. Объектно-ориентированное программирование. Классы
- •Раздел 2. Объектно-ориентированное программирование. Наследование
- •Int Win::GetSizeX(void)
- •Int Win::GetSizeY(void)
- •Void main()
- •Раздел 3. Объектно-ориентированное программирование. Полиморфизм
- •Void MakeWin(void);
- •Int GetSizeX(void);
- •Int GetSizeY(void);
- •Int Win::GetSizeX(void)
- •Int Win::GetSizeY(void)
- •Void main()
- •Раздел 4. Графика
- •Раздел 5. Вычисление корня функционального уравнения
Раздел 3. Объектно-ориентированное программирование. Полиморфизм
Задания этого раздела направлены на получение навыков создания классов сложного поведения с использованием механизма полиморфизма.
В задании предлагается определить классы и их иерархию, организовать механизм сложного полиморфизма, а также продемонстрировать использование введенных конструкций при работе.
Номер решаемой задачи соответствует номеру варианта, выданному преподавателем.
Пример решения задачи
Пусть необходимо построить иерархию классов «окно в текстовом режиме, символ, последовательность одинаковых символов». Механизм полиморфизма реализуем на основе вызова виртуальных методов из метода базового класса. Если при разработке иерархии классов Win–Symb–Lot учесть, что окно всегда рисуется для вывода символов, то в описание класса Win стоит включить метод Run, который изображает окно (MakeWin) и выводит в него символы (Print). Метод Print в классах Win, Symb и Lot переопределяется как полиморфный метод (виртуальный).
Наличие в классах хотя бы одного виртуального метода требует объявления конструкторов классов.
Программа на языке Си:
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
//Описание структуры класса
class Win
{ public: int x1, y1, x2, y2, cf;
Win(int Xn1, int Yn1, int Xn2, int Yn2, int Cfn);
Void MakeWin(void);
Int GetSizeX(void);
Int GetSizeY(void);
void Run(void)
{ MakeWin();
Print();
}
virtual void Print
{ }
};
class Symb : public Win
{ public: int cs, col, line;
char sym;
Symb(int Xn1, int Yn1, int Xn2, int Yn2, int Cfn, int Csn, int Cl, int Ln, char Sm);
void Print(void);
};
class Lot : public Symb
{ public: int n; //новое поле – количество символов
Lot(int Xn1, int Yn1, int Xn2, int Yn2, int Cfn, int Csn, int Cl, int Ln, char Sm, int Nk);
void Print(void); {переопределенный метод вывода символа}
};
Win::Win(int Xn1, int Yn1, int Xn2, int Yn2, int Cfn)
{ xl=Хnl; yl=Уn1;
x2=Хn2; y2=Уn2;
cf=Cfn;
}
void Win::МаkeWin(void)
{ window(x1, y1, x2, y2);
tехtbасkgrоund(cf);
clrscr();
}
Int Win::GetSizeX(void)
{ return x2 – x1 + 1; }
Int Win::GetSizeY(void)
{ return y2 – y1+1; }
Symb::Symb(int Xn1, int Yn1, int Xn2, int Yn2, int Cfn, int Csn, int Cl, int Ln, char Sm)
{ xl=Хnl; yl=Уn1;
x2=Хn2; y2=Уn2;
cf=Cfn;
cs=Csn; col=Cl;
line=Ln; sym=Sm;
}
void Symb::Print(void)
{ textcolor(cs); gotoxy(col, line);
cprinf("%c", sym);
}
Lot::Lot(int Xn1, int Yn1, int Xn2, int Yn2, int Cfn, int Csn, int Cl, int Ln, char Sm, int Nk)
{ xl=Хnl; yl=Уn1;
x2=Хn2; y2=Уn2;
cf=Cfn;
cs=Csn; col=Cl;
line=Ln; sym=Sm;
n= Nk;
}
void Lot::Print(void)
{ int i;
for(i=1; i<=n; i++)
{ Symb::Print();
col++;
}
}
Void main()
{ Win V1;
Symb V2;
Lot V3;
window(1,1,80,25);
textbackground(0);
clrscr();
Vl.Init(20,5,40, 15, 12);
V2.Init(10, 3, 60,20, 3, 1,30, 10, 'А');
V3.Init(1,1, 80, 25, 5, 1,40,12, 'В',10);
V1.Run();
getch();
V2.Run();
getch();
V3.Run();
getch();
return;
}
Задание на программирование
Учебное заведение, школа, ВУЗ, университет, институт.
Верхняя одежда, пальто, пиджак, куртка.
Память, ОЗУ, долговременная память, жесткий диск, диск CD.
Координаты, точка, горизонтальная линия, горизонтально-вертикальное перекрестье (нарисовать, стереть, закрасить, передвинуть, повернуть)
Элемент, множество, массив, матрица.
Текст, символ, последовательность символов, предложение.
Координаты, точка, заштрихованный эллипс, заштрихованный сектор (нарисовать, стереть, закрасить, передвинуть, повернуть)
Обувь, кроссовки, ботинки, сапоги.
Транспорт, городской транспорт, поезд, автобус.
Многочлен, линейное уравнение, квадратное уравнение, трехчлен.
Записная книжка, еженедельник, блокнот, бумага.
Человек, учащийся, студент, преподаватель.
Корабль, шхуна, парусник, теплоход.
Летательный аппарат, аэроплан, самолет, истребитель.
Учащийся, школьник, студент, работающий студент.
Точка, окружность, окружность с текстом внутри (нарисовать, стереть, передвинуть, изменить радиус).
Точка, отрезок, треугольник (нарисовать, стереть, закрасить, передвинуть, повернуть).
Вершина, выпуклый четырехугольник, трапеция (нарисовать, стереть, закрасить, передвинуть, повернуть).
выпуклый четырехугольник, квадрат, прямоугольник, ромб (нарисовать, стереть, закрасить, передвинуть, повернуть).
Меню, горизонтальное, вертикальное, иерархическое.
Книга, учебник, художественная литература, роман.
Вычислительная машина, калькулятор, ноутбук, компьютер.
Автомобиль, легковой автомобиль, автобус, микроавтобус.
Файл, текстовый файл, типизированный файл (создать, открыть, прочитать/записать данные).
Карта, атлас, географическая карта, игральная карта.
Мебель, стол, стул, компьютерный стол.
Лекарства, таблетки, микстура, пилюли.