Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Краткая и подробная шпаргалка.doc
Скачиваний:
117
Добавлен:
01.05.2014
Размер:
73.73 Кб
Скачать

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

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;...}}

Виртуальные базовые классы.

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

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

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

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

Приведение типов.

Можно приводить тип производимого класса к типу его виртуального класса. Приведение виртуального класса к типу производного - запрещено.

Статические члены класса.

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

Доступ к единственному объекту не заключает в себе неоднозначность.

Друзья класса.

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

Объявление: friend <Имя класса> <Имя ф-и> (Параметры);

Св-ва дружбы:

1 Дружба не передается по наследству.

2 Дружба не транзитивна.

Совместное использование (перегрузка) ф-и и операции.

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

Операции которые нельзя переопределить:

- . <Точка>

- :: <Присваивание>

- ?: <Условные операции>

- .* <Ссылки>

- # <знак препроцессорной операции>

Для переопределения операции используется понятия ОПЕРАЦИЯ-ФУНКЦИЯ: <тип> OPERATOR <операция> (параметры) {тело}

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

Недопустимо менять старшинство, ассоциативность (правило* группировки) и число операндов по операции.

Перегрузка унарных операций.

Список операций, которые можно применять в унарных операциях:

* - разъименование

8 - адрес

+ - унарная сумма

- - унарный минус

! - отрицание

~ - дополнения

-> - доступ к ...

Унарная операция означает, что она применима к одному объекту.

Обработка исключений (Исключительных ситуаций)

Исключительная ситуация - та ситуация, которая возникает во время выполнения той или иной (работы), операции, и должно быть обработана вне метода.

Распознается в методе, а в программе должно быть разработан этот метод.

Класс Программа

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

|методы |обращение |вызов метода

|класса |<---------------|класса |

+----------------+(параметры)+------------ ---+

|обнаружение |ошибка |обработка |

|ошибки |--------------->|ошибки |

+----------------+данные +----------------+

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

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

Класс должен быть описан:

1 В самом классе, где описаны методы - локальный класс.

2 В программе. Глобальный класс.