Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Лафоре Р. -> "Объектно-ориентированное программирование в С++" -> 143

Объектно-ориентированное программирование в С++ - Лафоре Р.

Лафоре Р. Объектно-ориентированное программирование в С++ — М.: Питер, 2004. — 992 c.
Скачать (прямая ссылка): obektnoorentprogramm2004.djvu
Предыдущая << 1 .. 137 138 139 140 141 142 < 143 > 144 145 146 147 148 149 .. 341 >> Следующая


Должность: заместитель директора Сумма взносов в гольф-клуб: 15000 Информация о первом ученом Фамилия: Подрезов Номер: 18

Количество публикаций: 54 Информации о первом рабочем Фамилия: Сидорук Номер: 1634

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

Абстрактный базовый класс

Заметим, что мы не определяли объекты класса employee. Мы использовали его как общий класс, единственной целью которого было стать базовым для производных классов.

Класс laborer выполняет те же функции, что и класс employee, так как не имеет никаких отличий от него. Может показаться, что класс laborer в данном случае лишний, ио, создав его, мы подчеркнули, что все классы имеют один источник — класс emlployee. Кроме того, если мы захотим в будущем модифицировать класс Laborer, то нам не потребуется делать изменения в классе employee.

Классы, использующиеся только как базовые для производных, например как employee в программе EMPLOY, иногда ошибочно называют абстрактными классами, подразумевая, что у этого класса нет объектов. Однако термин абстрактный имеет более точное определение, и мы это увидим в главе 11 «Виртуальные функции». 380 Глава 9. Наследование

Конструкторы и функции

Ни в базовом, ни в производном классах нет конструкторов, поэтому компилятор, наталкиваясь на определения типа

manager ml, ш21:

использует конструктор, установленный по умолчанию для класса manager, вызывающий конструктор класса employee.

Методы getdata() и putdata() класса employee принимают от пользователя имя и номер и выводят их на дисплей. Методы getdata() и putdata() классов manager и scientist используют одноименные методы класса employee и проделывают свою работу. Метод getdata() класса manager запрашивает у пользователя должность и сумму взносов в гольф-клуб, a putdata() выводит эти значения. В классе scientist эти методы оперируют значением количества публикаций.

Наследование и графика

В программе CIRCLES главы 6 «Объекты и классы» мы видели программу, в которой класс был создан для вывода на экран кругов. Конечно, кроме кругов существует еще множество других фигур: квадраты, треугольники. Слово «фигура» является обобщением, не затрагивающим определенный тип. Используем это при создании программы более сложной, но более понятной, чем программа, которая рисует различные фигуры, не используя их общих характеристик.

В частности, мы создадим класс shape как базовый класс и три производных класса: circle, rect (для прямоугольников) и tria (для треугольников). Как и в других программах, мы используем здесь функции консольной графики. Обратитесь к приложению Д «Упрощенный вариант консольной графики», приложению В «Microsoft Visual С++» или приложению Г «Borland С++ Builder», чтобы понять, как встроить графические файлы в программу в вашем компиляторе. Приведем листинг программы MULTSHАР:

// multshap.cpp // геометрические фигуры finclude <msoftcon.h> ///////////////////////////////////////////////////////////

class shape // базовый класс {

protected: int хСо. уСо; // координаты фигуры color fillcolor; // цвет fstyle fіПstylе: // стиль изображения public:

// конструктор без аргументов

shape ( ) : хСо ( 0 ), уСо ( 0 ). fillcolor ( cWHlTE ). fillstyle ( SOLIDJILL ) { }

// конструктор с пятью аргументами

shape ( int X. int у, color fc. fstyle fs ) : хСо ( х ). уСо ( у ). fillcolor ( fc ).

fillstyle ( fs ) { }

// функция установки цвета и стиля Наследование и графика 381

void draw ( ) const {

set_color ( fі 11 color ): set_fill_style ( fill style ):

}

}:

///////////////////////////////////////////////////////////

class circle : public shape {

private:

int radius: // радиус, a xCo и yCo будут координатами центра public:

// конструктор без параметров

circle С ) : shape ( ) { }

// конструктор с пятью параметрами

circle ( int X. int у. int г, color fc, fstyle fs ) : shape ( х, у, fc. fs ). radius ( г

// функция рисования окружности

void draw ( ) const {

shape::draw ( ):

draw_circle ( xCo. yCo. radius );

}

}:

///////////////////////////////////////////////////////////

class rect : public shape {

private:

int width, height: // ширина и высота, a xCo и yCo будут координатами верхнего празого

угла public:

// конструктор без параметров

rect ( ) : shape ( ). height ( 0 ). width ( 0 ) { }

// консіруктор с шестью параметрами

rect ( int X. int у. int h. int w. color fc. fstyle fs ) : shape ( х. у, fc. fs ),

height ( h ). width ( w ) { }

// функция рисования прямоугольника

void draw ( ) const {

shape: .-draw ( ):

draw_rectangle ( xCo, yCo. xCo + width, yCo + height ): // нарисуем диагональ set_color ( xWHITE ):

drawjine ( xCo, yCo, xCo + width, yCo + height ):

}

}:

/////////////////////////////////////////////////////////// class tria : public shape і

private:

int height: // высота пирамиды, a xCo и yCo будут координатами вершины public:
Предыдущая << 1 .. 137 138 139 140 141 142 < 143 > 144 145 146 147 148 149 .. 341 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100