- •ОБЪЕКТНО- ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
- •ЛИТЕРАТУРА
- •ВВЕДЕНИЕ В ООП
- •ООП оперирует с таким понятием как класс.
- •Важное свойство класса – детали его реализации скрыты от пользователей класса интерфейсом.
- •Свойства ООП
- •Инкапсуляция:
- •Наследование означает такое соотношение между классами, когда один класс использует структурную или функциональную
- •Иерархия классов представляется в виде древовидной структуры, в которой более общие классы располагаются
- •Полиморфизм – это свойство ООП, при котором одно и тоже имя может вызывать
- •Описание класса
- •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 <имя> { [private:]
<описание скрытых элементов> protected:
<описание защищенных элементов> public:
<описание доступных элементов> };
Секций private, protected, public в классе может быть сколько угодно и располагаться они могут в произвольном порядке.
private, protected, public – модификаторы уровня доступа.
private - наиболее ограниченный, закрытый доступ.
protected – защищенный уровень доступа.
public – общедоступный уровень доступа.
Различают три вида пользователей класса:
- сам класс (имеет доступ к членам класса с уровнем доступа public, protected, private;
обращается напрямую);
- производные классы (имеют доступ к членам класса с уровнем доступа public, protected;
обращаются напрямую);
- обычные пользователи: функции; и классы, не связанные никакими отношениями с исходным классом (имеют доступ к членам класса с уровнем доступа public; обращаются через объект класса).
Пример объявления класса с внешним описанием методов
class point
{
double x,y; public:
point(double xVal=0.0, double yVal=0.0); void PutPoint (double xVal, double yVal); double GetX();
double GetY();
};
point::point(double xVal, double)
{
x=xVal; y=yVal;
}
void point::PutPoint (double xVal, double yVal)
{
x=xVal; y=yVal;
}
double point::GetX() {return x;}
double point::GetY() {return y;}
:: - оператор разрешения области видимости.
Пример объявления класса со встроенными методами
class point
{
double x,y; public:
point(double xVal=0.0, double yVal=0.0) { x=xVal; y=yVal;}
void PutPoint (double xVal, double yVal) { x=xVal; y=yVal; };
double GetX() {retun x;} double GetY() {retun y;}
};
Встроенные функции ускоряют работу программы за счёт увеличения исполнимого файла.
Это происходит из-за того, что каждый вызов встроенной функции компилятор заменяет фактическим кодом функции.
А при работе программы не тратится время на передачу управления функции, сохранение параметров функции в стеке потока, возврат управления в основную программу.
Метод описанный как внешний можно сделать встроенным с помощью ключевого слова inline.
inline void point::PutPoint (double xVal, double yVal) {
x=xVal; y=yVal;
}
Компилятор может проигнорировать inline, если
- функция вызывается очень большое количество раз;
- функция содержит большое количество строк кода.
Свойства полей класса:
- могут иметь любой тип, кроме типа этого же класса, но могут быть указателями или ссылками на этот класс;
// можно class point {
point *p;
…
};
// ошибка!!! class point { point p;
…
};
- могут быть описаны с модификатором const, при этом они инициализируются только один раз (с помощью конструктора) и не могут изменяться;
- могут быть описаны с модификатором static (разделяются между всеми объектами класса), но не с auto, extern и register.
Инициализация полей при описании не допускается, так как память под класс не выделяется, пока не будет создан экземпляр класса.