Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Множественное наследование

Основные св-ва ООП

1 Инкапсуляция

защита данных и методов объекта от воздействия на них другими объектами.

Реализация: через понятие class

Внутренняя | Интерфейс

Реализация | объекта

объекта |

----------------+------------

Данные + | Данные +

операции | операции

 

2 наследование

Создание новых производных классов, которые наследуют данные фун-и от одного или нескольких базовых классов.

Реализация:

а) Единичное A<-B<-C

б) Множественное A<-C->B

3 полиморфизм

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

 

Конструктор - Специальный метод класса, обеспечивающий инициализацию данного класса.

Инициализация - выделения памяти для объекта, установление начального значения, установка связей.

Конструктор вызывается автоматически при объявлении объекта или при динамическом выделении с помощью операции NEW.

Конструкторы могут создаваться автоматически компилятором (по умолчанию) или создаваться (определяться) пользователем.

Св-ва:

- конс-р имеет тоже имя, что и класс.

- Конс-р не может иметь возвращаемого значения

- В класс может объявить несколько конструкторов, которые должны отличаться либо числом, либо типом параметров.

- Конс-ры не могут быть виртуальными или статическими.

- Конс-р не может быть вызван в явном виде

 

Конс-р с параметрами

Point:: Point (int Xo, Int Yo): X(Xo), Y(Yo) {}

 

Способы порождения объектов

Три способа:

- Автоматически, когда объявление встречается при выполнении программы, и объекты уничтожаются при выходе из блока в котором встретилось это объявление. У таких объектов память выделяется в стеках. Т.о. выделяется память для локальных объектов.

- Объекты создаются один раз при запуске программы и уничтожаются при её завершении. Т.о. создаются объекты, описанные с атрибутом STATIC или глобальные переменные. Для этого способа порождения объектов используется статическая память.

- Объекты порождаются динамически при выполнении операции NEW и уничтожаются при выполнении операции DELETE. Время жизни(TTL) таких объектов не ограничено. Для них память выделяется в свободной области, которая называется куча.

+------+

|Static |

+------+

|Стек |

+------+

|Куча |

+------+

 

Операции выделения, уничтожения памяти.

Выделения: int *p=new int; - в качестве параметра класс, тип.

При выполнении операции NEW:

1. Выделяется память для объекта, указанного в качестве параметра операции.

2. Этот объект инициализируется, если для него есть конструктор

Point *k=new Point(0,0);

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

Уничтожение памяти (объекта)

DELETE (p);

 

Массивы объектов

Чтобы объявить массив объекта необходимо чтобы класс имеет конструктор по умолчанию.

Class A { int a1; int a2;

Public A(int i=0, int j=0){a1=i, a2=j}};

 


Деструктор

- это стандартный метод класса, который вызывается для освобождения элементов объекта до момента разрушения самого объекта

Св-ва:

- Д-р имеет тоже имя, что и класс, но перед именем ставиться значок "~"

- Д-р не имеет параметров

- Д-р вызывается не явно, когда объект выходит из области действий или при выполнении операции DELETE

- Д-р не имеет возвращаемого значения

- Д-р не наследуется, а в производном классе вызывается автоматически.

- Д-р может иметь атрибут virtual

- Д-р выполняется в обратном порядке по отношению к конструкторам.

 

 

Объявление и определение имени.

Объявление - задание соответствия между именем и его типом для того, чтобы компилятор знал как это имя использовать в программе.

Определение - это задания соответствия между именем и его содержанием (сущностью). Это может быть размер памяти выделяемой для этого имени, или некоторый код.

В программе должно быть только одно определение каждого имени, а объявлений может быть несколько но все они должны быть согласованы с типом объекта, к которому они относиться.

 

 

Наследование

Существует два механизма:

- Включения (Поглощения)

- Наследования (Добавления)

 

 

Описание наследования

class <имя производного класса>: [Модификатор]{

Имя базового класса,

[Модификатор] Имя базового класса

{тело производного класса}

Модификатор не только сузит права доступа, но никак их не расширит.

 

 

Конструкторы в производных классах

Конструктор базовых классов в производном классе вызывается в порядке, последовательности их объявления.

При объявлении объекта из класса 1, сначала вызывается самый первый потом ниже и ниже.

Конструкторы по иерархии не передаются.

 

 

Виртуальные функции

-это фун-я базового класса, реализацию которой можно изменить в производном классе.

Для определения виртуальной ф-и в базовом классе необходимо этой ф-и приписать атрибут VIRTUAL ф-я, объявленная в базовом классе виртуальной в производном классе считается тоже виртуальной для этого достаточно, чтобы совпадали имя ф-и, тип возвращаемого значения, тип и число параметров ф-и. (Т.е полное совпадение в противном ошибка или создание новой ф-и).

 

 

Позднее связывание.

Связывание - это механизм установки соответствий между именем объекта и типом его значения. Если это соответствие устанавливается на этапе трансляции, то такое связывание называется ранним или статическим. Если соответствие устанавливается на этапе выполнения программы, то поздним или динамическим. Механизм объявления ВФ, т.к. тип объекта не известен заранее.

Недостатки:

- Увеличение размера программы

+ Время выполнения программы увеличивается

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

-косвенное обращение

 

 


Абстрактный класс

- это класс, который может использоваться в качестве базового класса для построения производного класса. Объекты абстрактного класса не может создоваться, иначе как подобъекты, переданные по наследству.

Класс явл абстрактным, если он содержит хотя бы одну чистую виртуальную ф-ю.

Виртуальная ф-я наз чистой, если в объявлении ф-и задан чистый спецификатор.

virtual void f(int)=0;

Абстрактный класс нельзя употреблять в качестве типа параметра ф-ии, типа возвращаемого значения или как тип при явном приведении типа. Может объявлять указатели этой ссылки на абстрактный класс.

Чистые виртуальные ф-и наследуются и остаются чистыми в производном классе пока в нем не будет сделано объявления этой ф-и.

Абстрактный класс используется для определения интерфейса. Элемент конструирования классов.

 

 

Множественное наследование

В качестве базовых классов используется не один, а несколько классов.

B

^

|

A<-D->C

class D:[модиф]A, [модиф]B, [модиф]C {...}

Класс не может быть задан в качестве непосредственного базового класса более одного раза, но может быть использоваться несколько раз в качестве не прямого базового класса.

Разница между множественным наследованием и явным объявлением объекта в классе.

Class C:protected A, protected B{ public void f(){a=1;b=2;...}}

Class C {A A1,B B1; Public void f() {A1.a=1, B1.b=2;...}}

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...