- •Наследование
- •Наследование классов
- •Классы 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 { // самый верхний базовый класс а
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( ).