
- •2)Иерархия классов.
- •3)Методы (правила).
- •4)Порядок вызова методов.
- •5)Основные принципы ооп.
- •6)Пример использования указателя this.
- •7.8) Директивы Private, Public, Protected.
- •9)Статические методы.
- •10)Виртуальные методы.
- •12) Совместимость классов.
- •16)Указатель на объект. Операции динамического выделения памяти.
- •17)Чистые виртуальные функции. Абстрактные классы
- •Передача объектов как аргументов функций
- •Использование объекта в качестве возвращаемого значения.
12) Совместимость классов.
Основной принцип совместимости классов. Совместимость распространяется от потомков к предкам, то есть объекты дочерних классов могут свободно использоваться вместо объектов родительских классов, но не наоборот. Кроме того любой дочерний класс наследует совместимость всех своих родительских классов.
Совместимость может быть трёх видов:
Между объектами.
Между указателями на объект.
Между формальными и фактическими параметрами методов.
Совместимость между объектами и указателями на объект.
Объекту родительского класса можно присвоить любой объект из дочерних классов, но не наоборот. Если разрешить присваивание наоборот, то те поля данных, которые были добавлены в дочерние классы, останутся незаполненными.
Совместимость формальных и фактических параметров.
Форм.= фактич.
Формальный параметр данного класса можем принимать в качестве фактического параметра, либо объект из своего класса, либо из любого дочернего.
void Show (tPoint t);
{……..
}
{
- show(loc);
+ show(p);
+ show(El);}
Конструкторы и деструкторы
Конструктор-это специальная функция, являющаяся членом класса и имеющая то же самое имя, что и класс.
1) Конструктор вызывается компьютером автоматически при создании объекта, т. е. при объявлении объекта и при выделении памяти под объект. Конструктор осуществляет автоматическую инициализацию объектов.
2) Конструктор не возвращает никакого значения. Например:
Class queue { queue(void);//конструктор}
3) Если в классе не объявлен ни один конструктор, компилятор сам сгенерирует конструктор по умолчанию.
4) Конструктор в явном виде не вызывают.
Деструктор(destructor)- еще одна специальная функция класса.
Вызывается при прекращении действия объекта. Например, при освобождении памяти из под объекта( если при создании для него выделялась динамическая память). Локальные объекты удаляются, когда выходят из области видимости (создаются и инициализируются конструктором при входе в блок). Глобальные объекты удаляются при завершении программы(создаются в начале программы и инициализируются конструктором).
С помощью деструктора можно что-нибудь сделать при окончании работы с объектом: освободить память, восстановить экран, закрыть файлы и т.д.
Имя деструктора: « ~имя_класса»
16)Указатель на объект. Операции динамического выделения памяти.
До сих пор во всех наших примерах использовалось статическое выделение памяти. Скажем, определение переменной ival
int ival = 1024;
заставляет компилятор выделить в памяти область, достаточную для хранения переменной типаint, связать с этой областью имя ival и поместить туда значение 1024. Все это делается на этапе компиляции, до выполнения программы.
С++ имеет встроенный тип "указатель”, который используется для хранения адресов объектов. Чтобы объявить указатель, содержащий адрес переменной ival, мы должны написать:
Существует также специальная операция взятия адреса, обозначаемая символом &. Ее результатом является адрес объекта. Следующий оператор присваивает указателю pint адрес переменной ival:
int *pint;
pint = &ival; // pint получает значение адреса ival
Основные отличия между статическим и динамическим выделением памяти таковы:
статические объекты обозначаются именованными переменными, и действия над этими объектами производятся напрямую, с использованием их имен. Динамические объекты не имеют собственных имен, и действия над ними производятся косвенно, с помощью указателей;
выделение и освобождение памяти под статические объекты производится компилятором автоматически. Программисту не нужно самому заботиться об этом. Выделение и освобождение памяти под динамические объекты целиком и полностью возлагается на программиста. Это достаточно сложная задача, при решении которой легко наделать ошибок. Для манипуляции динамически выделяемой памятью служат операторы ne w и d e l e t e.