Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Наследование.doc
Скачиваний:
16
Добавлен:
18.04.2015
Размер:
169.47 Кб
Скачать

Int size;

hide(); // убрать изображение пятна с экрана

tag=0; // признак освобождения памяти

delete pspot; //освободить память, где находится битовый образ

a=dr*rad; //вычислить новый радиус

if(a<=0) rad =0;

else rad=(int)a;

size=imagesize(x-rad,y-rad,x+rad,y+rad);

//определить размер в байтах под битовый образ

pspot=new char[size]; //выделить память

show(); // изобразить пятно на экране

}

int& GetR() {return rad;} // функция возвращает радиус пятна

};

xi x

yi

y

Void main ( )

{ int dr = DETECT , mod ; // автоопределение драйвера

initgraph ( &dr , &mod , "D:\\Borlandc\\BGI" );//инициализация граф. режима

int errorcode=graphresult(); // код ошибки инициализации

if(errorcode!=grOk){cout<<" Ошибка " ; exit(0);}

setcolor(4) ; // установлен красный цвет линий

setfillstyle(1,4);

//установлен стиль заполнения 1 – сплошное, 4- красным цветом

{ spot A(200,50,20);

spot D(500,200,30);

A.show();

getch();

D.show(); getch();

A.move(50,60); getch();

D.vary(3); getch();

setcolor(7);

D.point::show ( );

getch();

}

closegraph( ) ;

}

Из класса point класс spot наследуются координаты x, y точки и две функции GetX ( ) и GetY ( ).

Методы point ::show ( ) и point :: move ( ) замещены в производном классе.

Если нас не устраивает реализация тех или иных функций базового класса, с помощью замещения можно изменить реализацию базовой функции. Нужно в производном классе объявить функцию с тем же именем, параметры и тип возвращаемого результата не важны. Главное, чтобы было то же имя. Исходная функция, продолжая существовать, становится невидимой. Однако ее все же можно вызвать, используя операцию разрешения видимости “::”.

Функция point :: hide ( ) не наследовалась, т. к. имеет статус private.

Конструктор класса имеет три параметра – координаты центра пятна (xi, yi) и радиус пятна (ri).

Координаты передаются в конструктор базового класса, и создается безымянный объект точка – центр пятна. Конструктор базового класса вызывается до выполнения тела конструктора производного класса.

Затем производится инициализация данных производного класса. Для сохранения образа пятна в оперативной памяти выделяется память с помощью new.

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

В нашем случае в деструкторе освобождается память , выделенная под образ пятна, и убирается пятно с экрана. Для последнего действия используется функция hide(), которая вызывает графические функции. Таким образом, вызов деструктора по окончанию программы и после функции закрытия графического режима не возможен.

Поэтому в программу включен внутренний блок, где определены объекты и деструктор будет автоматически вызываться при выходе из блока, т.е. еще до closegraph( ).