Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Пример выполнения практического задания

Задание 3

Организация программ с использованием механизма наследования классов

Цель задания

1. Изучение механизма наследования классов.

2. Получение навыков в написании программ с использованием механизма наследования.

Методические указания

Для проверки функционирования созданных классов написать программу, использующую эти классы. В программе должны быть продемонстрированы все свойства созданных классов.

Варианты МИНИМАЛЬНОГО задания

1. Определить иерархию классов для хранения информации о летательных аппаратах. Начните с общего базового класса airship, предназначенного для хранения количества перевозимых пассажиров и количества перевозимого груза. Затем создайте два производных от airship класса airplane и balloon. Класс airplane должен хранить тип самолетного двигателя (винтовой или реактивный) и дальность полета. Класс balloon должен хранить информацию о типе газа, используемого для подъема дирижабля (водород или гелий), и его максимальный потолок (в метрах). Создайте программу для демонстрации работы этой иерархии классов.

2. Создайте исходный базовый класс building для хранения числа этажей и комнат в здании, а также общую площадь комнат. Создайте производный класс house, который наследует класс building и хранит число ванных комнат и число спален. Кроме этого создайте производный класс office, который наследует класс building и хранит число огнетушителей и телефонов.

3. Определить классы и их иерархию, а также продемонстрировать использование введенных конструкций при работе. Человек: студент, преподаватель.

4. Точка: окружность: окружность с текстом внутри (нарисовать, стереть, передвинуть, изменить радиус). Определить классы и их иерархию, а также продемонстрировать использование введенных конструкций при работе.

5. Точка: отрезок: треугольник (нарисовать, стереть, закрасить, передвинуть, повернуть). Определить классы и их иерархию, а также продемонстрировать использование введенных конструкций при работе.

6. Точка: отрезок: выпуклый четырехугольник: трапеция (нарисовать, стереть, закрасить, передвинуть, повернуть). Определить классы и их иерархию, а также продемонстрировать использование введенных конструкций при работе.

7. Точка: отрезок: квадрат: прямоугольник: ромб: параллелограмм (нарисовать, стереть, закрасить, передвинуть, повернуть). Определить классы и их иерархию, а также продемонстрировать использование введенных конструкций при работе.

8. Меню: горизонтальное, вертикальное, иерархическое. Определить классы и их иерархию, а также продемонстрировать использование введенных конструкций при работе.

9. Окно: стековое, слоеное, всплывающее. Определить классы и их иерархию, а также продемонстрировать использование введенных конструкций при работе.

10. Список: бинарное дерево: n – арное дерево. Определить классы и их иерархию, а также продемонстрировать использование введенных конструкций при работе.

Пример выполнения практического задания

Постановка задачи

Создайте класс для работы с объектом ОКНО (с рамкой, тенью и текстовой строкой внутри). Иерархия классов будет такой. Базовый класс ScreenObject описывает некоторый прямоугольный объект на экране – строку, кнопку, окно, …

Его член-данные: координаты объекта и цвет объекта.

Член- функции: конструктор и функция для вывода изображения объекта.

Этот класс имеет два производных класса: String (описывающий текстовую строку) и Window (описывающий окно).

Класс String содержит такие поля как адрес начала строки и цвет букв текста, а также конструктор, вывод текста (вспомогательная функция), изображение строки на экране.

В классе Window членами- данными являются:

nmax – максимально допустимое число включаемых в окно объектов (строк, кнопок,..);

n – фактическое число включенных объектов;

pObj – массив указателей на включенные объекты;

ColorFrame - цвет рамки окна (цвет тени – фиксированный).

Члены функции класса Window:

конструктор, рисование тени, рисование рамки, изображение всего объекта; используется также перегрузка операции << для включения в окно очередного объекта (функция возвращает 1 или 0 в качестве признака того, успешно ли включился в окно данный объект).

В примере не проводятся проверки корректности данных: не выходят ли координаты окна за рамки экрана, влезает ли объект в окно и т. п.

Структурная схема классов (представить в виде UML-диаграмм)

Член-данные     Базовый класс ScreenObject Член-функции
координаты левого верхнего угла: x1, y1 координаты правого нижнего угла: xr, yr цвет объекта(окна, строки, …): ColorGround Конструктор: ScreenObject() Вывод изображения объекта: Show() смещение координат: Move ()  
адрес начала строки: pText цвет букв текста: ColorText Производный класс String(описывает текстовую строку). Конструктор: String () Вывод текста: DrawText() Изображение строки на экране: Show ()
максимально допустимое число включаемых в окно объектов (строк, кнопок,..): nmax фактическое число включенных объектов: n массив указателей на включенные объекты: pObj цвет рамки окна (цвет тени – фиксированный): ColorFrame Производный класс: Window (описывает окно) Конструктор: Window() Рисование тени: DrawShadow() Рисование рамки: DrawFrame() Изображение всего объекта: Show() Перегрузка операции << для включения в окно очередного объекта: operator <<

Исходный текст программы

// ОПИСАНИЯ КЛАССОВ

class ScreenObject

{ protected:

int x1, y1; // координаты левого верхнего угла

int xr, yr; // координаты правого нижнего угла

int ColorGround; // цвет объекта (окна, строки, …)

ScreenObject (int Xleft, int Yup, int Xright, int Ydown, int ColGround);

virtual void Show (void);

void Move (int Dx, int Dy); }; // параметры – смещения координат

 

class Window: public ScreenObject

{ int nmax;

int n;

int ColorFrame;

ScreenObject **pObj;

public:

Window (int Xleft, int Yup, int Xright, int Ydown, int ColGround,

int ColFrame, unsigned MaxObj);

// параметры – координаты углов окна, цвет окна и рамки,

// максимально возможное число включаемых объектов

void Show (void);

void DrawFrame (void);

void DrawShadow (void);

int operator << (ScreenObject *obj); };

 

class String: public ScreenObject

{ char * pText;

int ColorText;

public:

String (int xleft, int yup, int ColGround, int ColText, char *Text);

void Show (void);

void DrawText (void); };

 

// РЕАЛИЗАЦИЯ КЛАССОВ

#include <stdio.h >

#include <conio.h >

// class ScreenObject

ScreenObject:: ScreenObject (int Xleft, int Yup, int Xright, int Ydown,

int ColGround)

{ x1 = Xleft; y1 = Yup; xr = Xright; yr = Ydown; ColorGround = ColGround; }

void ScreenObject:: Show (void)

{ int i, j;

textbackground (ColorGround);

for(j = y1; j <= yr; j ++) // зафиксировали номер строки

for(ji= x1; i <= xr; i ++) // идем по столбцам

{ gotoxy (i, j); cprintf (“ “); } }

void ScreenObject:: Move (int Dx, int Dy)

{ x1 += Dx; y1 += Dy; { xr += Dx; yr += Dy; }

 

// class String

String:: String (int xleft, int yup, int ColGround, int ColText, char *Text):

ScreenObject (xleft, yup, xleft + strlen(Text, yup, ColGround)

{ ColorText = ColText;

pText = new char [strlen(Text)+1];

if (pText) strcpy (pText, Text); }

void String:: DrawText (void);

{ textcolor (ColorText);

gotoxy (x1, y1);

cprintf (“%s “, pText); }

void String:: Show (void)

{ ScreenObject:: Show (); // рисуем пустой прямоугольник для

DrawText (); } // строки и пишем в нем текст

 

// Class Window

Window:: Window (int Xleft, int Yup, int Xright, int Ydown, int ColGround,

int ColFrame, unsigned MaxObj):

ScreenObject (int Xleft, int Yup, int Xright, int Ydown, int ColGround)

{ ColorFrame = ColFrame;

nmax = MaxObj;

pObj = new ScreenObject *[nmax]; // выделяем память под массив указателей

if (! pObj) nmax = 0; // если не хватает памяти

n = 0; }

void Window:: DrawFrame (void)

{ int i;

textcolor (ColorFrame);

for (i = x1; i <= xr; i++)

{ gotoxy (i, y1); cprintf (“_ “); // верхняя линия

gotoxy (i, yr); cprintf (“_”); // нижняя линия рамки окна }

for (i = y1+1; i < yr; i++)

{gotoxy (x1, i); cprintf (“_ “); // левая часть

gotoxy (xr, i); cprintf (“_”); // правая часть рамки окна } }

void Window:: DrawShadow (void)

{ int i;

textcolor (BROUN);

for (i = x1 +1; i <= xr+1; i++)

{ gotoxy (i, yr+1); cprintf (“_ “); // нижняя часть тени }

for (i = y1+1; i <= yr; i++)

{gotoxy (xr+1, i); cprintf (“_ “); // правая часть тени } }

int Window:: operator << (ScreenObject *obj)

{ if (n = = nmax) return 0; //объект не может быть включен

pObj[n] = obj;

n++;

obj -> Move (x1, y1);

return 1; }

void Window:: Show (void)

{ int i;

ScreenObject:: Show ();

DrawShadow ();

DrawFrame ();

for { i = 0; i < n; i++) // выводим все объекты, включенные в окно

pObj[i] -> Show (); // здесь используется виртуальность функцииShow(),

// т.к. в pObj могут быть адреса разных объектов –

// строк, кнопок, окон, …, но все они – производные от ScreenObject

}

 

void main()

{

Window *wn;

String *str;

// рисуем синее окно с белой рамкой; в нем – три зеленые строки с

// надписями черными буквами

wn = new Window (5, 5, 20, 20, BLUE, WHITE, 5);

// фактические параметры функции new String() содержат координаты

// относительно левого верхнего угла окна

str = new String(2, 2, GREEN, BLACK, “Xа-Xа”);

*wn << str;

str = new String(4, 4, GREEN, BLACK, “Xи-Xи”);

*wn << str;

str = new String(6, 6, GREEN, BLACK, “Xо-Xо”);

*wn << str;

wn -> Show ();

getch ();

}



<== предыдущая лекция | следующая лекция ==>
samp ob (88); // инициализация объекта значением 88 | Методические указания для выполнения задания 4.2
Поделиться с друзьями:


Дата добавления: 2016-12-31; Мы поможем в написании ваших работ!; просмотров: 1210 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Ваше время ограничено, не тратьте его, живя чужой жизнью © Стив Джобс
==> читать все изречения...

2220 - | 2164 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.