- •Наследование
- •Наследование классов
- •Классы union не могут использоваться при наследовании! Определение производных классов: сlass t : X, y , z {…} ;
- •Void main ( )
- •Передача параметров в базовый класс
- •Конструкторы с инициализацией по умолчанию в иерархии классов
- •Класс “точка на графическом экране”. Производный класс –“пятно”
- •Void point :: show (void)
- •Void point ::move ( int xn, int yn )
- •Int&point::GetX (){return X;}
- •Int& point:: GetY(void) {return y;}
- •Initgraph( тип графического драйвера, режим адаптера , путь к драйверу)
- •Void far initgraph (int far * graphdriver, int far * graphmode, char far * pathtodriver);
- •Void main ( )
- •Рассмотрим класс “ пятно”
- •Int size;
- •Void main ( )
- •Множественное наследование. Виртуальные базовые классы
- •Рассмотрим множественное наследование на примере.
- •Void show ()
- •Объект базового класса point дублируется:
- •Spotelli
- •Void show()
- •Void hide()
- •Void show()
- •Void hide()
- •Void main ( )
- •Class a { // самый верхний базовый класс а
Initgraph( тип графического драйвера, режим адаптера , путь к драйверу)
Void far initgraph (int far * graphdriver, int far * graphmode, char far * pathtodriver);
Для указания типа драйвера в файле имеются константы:
DETECT= 0 (режим автоопределения типа)
CGA =1
EGA=3
VGA=9
и т. д.
Аналогично имеются константы для определения моды адаптера.
Но если программа рассчитана на работу с любым адаптером, вызов функции можно производить с требованием автоопределения типа драйвера:
int dr = DETECT , // тип драйвера и
mod ; // режим работы адаптера
// определяются автоматически
//режим при этом выбирается с максимальным разрешением
initgraph ( &dr , &mod , "D:\\Borlandc\\BGI" );
// предполагается, что драйвер находится в каталоге BGI
/* #include<conio.h>
#include “point.h”
#include ”point.cpp”
Void main ( )
{ // создается три объекта , три невидимых точки
point A ( 150, 70 );
point B ; // координаты по умолчанию равны x=0 и y=0
point D ( 400, 200);
//инициализация графики
int dr = DETECT , // тип драйвера и адаптера - режим авто определения
mod ; // режим работы адаптера
initgraph ( &dr , &mod , "D:\\Borlandc\\BGI" ); // -
// - перевод в графический режим
int errorcode=graphresult();
if(errorcode!=grOk){cout<<grapherrormsg(errorcode) ;
getch( ) ; exit(0);}
//установка цвета
setcolor(7) ; // установка цвета для линий и символов
A.show ( ) ; // показать на экране точку А
getch ( ) ; // подождать до нажатия клавиши
B.show ( ) ; // показать на экране точку В
getch ( ) ; // подождать до нажатия клавиши
D.show ( ) ; // показать на экране точку D
getch ( ) ; // подождать до нажатия клавиши
A.move ( ) ; // переместить точку А в начало координат
getch ( ) ; // подождать до нажатия клавиши
B.move(50, 60 ) ; // переместить точку B
getch ( ) ; // подождать до нажатия клавиши
*/
Рассмотрим класс “ пятно”
// определение класса spot находится в модуле spot.cpp
#ifndef SP
#define SP 1
#include “point.cpp”
class spot: public point { // класс spot производный от класса point
protected: //защищенные данные производного класса
int rad; // радиус пятна
int vis; // признак видимости пятна на экране
int tag ; // признак сохранения образа пятна в памяти
void*pspot; //указатель на область ОП для изображения пятна
//(битового образа)
public:
spot(int xi, int yi, int ri):point(xi, yi) //конструктор производного класса с
//вызовом конструктора базового класса
{
int size; vis =0 ; tag =0; rad =ri;
size = imagesize ( xi-ri, yi-ri, xi+ ri, yi+ ri);
// определяется объем памяти в байтах для
// для сохранения образа квадратного участка экрана, на котором будет
// изображено пятно
pspot=new char[size] ; } //выделение памяти под битовый образ
~spot() //деструктор производного класса
{hide (); // удаление с экрана изображения пятна
tag =0;
delete pspot;} // освободить память, выделенную под битовый образ
void show() //функция – изображения пятна на экране
{ if (tag ==0) // если в памяти нет битового образа пятна
//то его не может быть на экране
| //рисуем на экране и помещаем в память
{ circle(x, y, rad); // нарисовать окружность
floodfill (x, y, getcolor()); // заполнить произвольную замкнутую фигуру
// x , y-координаты точки внутри фигуры, последний
// параметр задает цвет границы
getimage(x-rad,y-rad,x+rad,y+rad, pspot);
// помещает в память копию прямоугольного фрагмента
// изображения – битовый образ
tag=1; // признак наличия образа в памяти
}
else //если пятно есть в памяти
if ( vis ==0) //но его нет на экране
putimage(x-rad, y-rad, pspot, XOR_PUT);
// выводит в заданную область экрана копию изображения, размещенного в
// памяти последний параметр определяет способ копирования – если //изображение вывести на экран в то место, где уже есть тоже изображение, то //оно исчезнет
vis=1; // признак видимости пятна на экране для обоих случаев
}
void hide ( ) //функция убирающая изображение пятна с экрана
{ if (vis ==0) //если изображения нет на экране
return;
putimage(x-rad, y-rad, pspot, XOR_PUT); //замазать изображение
vis=0;
}
void move ( int xn, int yn) //функция перемещения пятна на экране
{ hide(); // убрать пятно в т. x,y
x=xn; y=yn; // координатам задать новое значение
show(); } // изобразить пятно в новой точке экрана
void vary ( float dr) // функция изменяющая размеры пятна
{ float a;