
- •ОБЪЕКТНО- ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
- •ЛИТЕРАТУРА
- •ВВЕДЕНИЕ В ООП
- •ООП оперирует с таким понятием как класс.
- •Важное свойство класса – детали его реализации скрыты от пользователей класса интерфейсом.
- •Свойства ООП
- •Инкапсуляция:
- •Наследование означает такое соотношение между классами, когда один класс использует структурную или функциональную
- •Иерархия классов представляется в виде древовидной структуры, в которой более общие классы располагаются
- •Полиморфизм – это свойство ООП, при котором одно и тоже имя может вызывать
- •Описание класса
- •private, protected, public – модификаторы уровня доступа.
- •Различают три вида пользователей класса:
- •Пример объявления класса с внешним описанием методов
- •point::point(double xVal, double)
- •Пример объявления класса со встроенными методами
- •Встроенные функции ускоряют работу программы за счёт увеличения исполнимого файла.
- •Метод описанный как внешний можно сделать встроенным с помощью ключевого слова inline.
- •Свойства полей класса:
- •- могут быть описаны с модификатором const, при этом они инициализируются только один
- •// ошибка!!! class point {
- •class Rect { class Point()
- •- внутри локального класса можно использовать типы, static и extern переменные, внешние функции
- •Создание объектов
- •2. Создание объектов с со специальной инициализацией .
- •При создании каждого объекта выделяется память, достаточная для хранения всех его полей, и
- •При выходе объекта из области видимости он уничтожается, при этом автоматически вызывается деструктор.
- •Доступ к элементам объекта аналогичен доступу к полям структуры.
- •Указатель this
- •В явном виде этот указатель применяется в
- •int main()
- •Указатель this можно также применять для идентификации поля класса в том случае, когда
- •Конструкторы
- •-класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации (при
- •-конструкторы не наследуются;
- •Конструктор вызывается, если в программе встретилась какая-либо из синтаксических конструкций:
- •Пример. Использование перегруженных конструкторов.
- •point::point(char *np)
- •Деструкторы
- •Деструктор вызывается автоматически:
- •Между конструктором и деструктором существует ряд различий:
- •class point {… public:
// ошибка!!! class point {
double x=0.0;
…
};
Виды классов:
-глобальные (объявленные вне любого блока);
-локальные, или вложенные (объявленные внутри блока, например, функции или другого класса).
class Rect { class Point()
{
//…
};
Point lefttop, rightbottom;
…
};
Свойства локальных классов:
- методы этого класса могут быть описаны только внутри класса;
- внутри локального класса можно использовать типы, static и extern переменные, внешние функции и элементы перечислений из области, в которой он описан; запрещается использовать auto переменные из этой области;
-локальный класс не может иметь статических элементов;
-если один класс вложен в другой класс, они не имеют каких-либо особых прав доступа к элементам друг друга и могут обращаться к ним только по общим правилам.
Создание объектов
Происходит по одному из трёх сценариев.
1. Создание объектов с инициализацией по умолчанию.
point p; //создание объекта с x=0, y=0
point p2[200]; //массив из 200 объектов с параметрами по умолчанию (у каждого из объектов x=0, y=0)
2. Создание объектов с со специальной инициализацией .
point p1(10,20); //объект с явной инициализацией (x=10, y=20)
point *p3 = new point(10); //динамический объект (x=10, y=0)
3. Создание объектов путем копирования других объектов.
point &p4=p1; // (x=10, y=20)
При создании каждого объекта выделяется память, достаточная для хранения всех его полей, и автоматически вызывается конструктор, выполняющий их инициализацию.
Каждый объект получает свою копию полей класса (кроме статических полей).
Методы класса хранятся в единственном экземпляре. Им добавляется неявный параметр (указатель this) – адрес объекта класса, который вызывает метод.
При выходе объекта из области видимости он уничтожается, при этом автоматически вызывается деструктор.
Если работа с объектом класса выполняется через указатель, то по окончании работы с ним
объект необходимо явно уничтожить с помощью оператора delete:
delete p3;
Доступ к элементам объекта аналогичен доступу к полям структуры.
Для этого используется операция «.» при обращении к элементу через имя объекта и операция «->» при обращении через указатель.
p.PutPoint(40,60);
printf(“x=%.3lf”,p2[0].GetX());
printf(“x=%.3lf”, p3->GetY());
Указатель this
Указатель this – скрытый параметр любого метода класса, в котором хранится константный указатель на вызвавший метод класса объект.
Указатель this неявно используется внутри метода для ссылок на поля объекта класса.
Необходим, чтобы обеспечить работу методов с полями именно того объекта, для которого они были вызваны, так как каждый объект имеет свою копию полей, а методы класса хранятся в единственном экземпляре.
В явном виде этот указатель применяется в
основном для возвращения из метода указателя (return this;) или ссылки (return
*this;) на вызвавший объект.
Пример. Дополним класс point методом, который из двух точек возвращает ссылку на ту, у которой больше координата x.
class point {
…
point &the_greater(point &p) { if (x>p.GetX()) return *this;
return p;
}
};