- •Лекции по Объектно-ориентированному программированию.
- •Классы.
- •Квалификаторы доступа.
- •Инициализация полей данных.
- •Операторы new и delete.
- •Перегруженные функции.
- •Конструктор копирования.
- •Статические компоненты класса.
- •Дружественные функции.
- •Перегрузка операций.
- •Наследование.
- •Производные классы. Доступ к базовым классам.
- •Возможны следующие варианты доступа:
- •Конструкторы и деструкторы в иерархии классов.
- •Виртуальные функции.
- •Virtual тип_возвр_знач-я имя_функции (параметры)
- •Потоки ввода / вывода.
- •Операции помещения и извлечения.
Инициализация полей данных.
Для того, чтобы предусмотреть инициализацию переменных в программе, надо написать специальную функцию – метод класса (access).
set_num (int n) поле_data = переменная;
{num = n ;}
Присваивание полей производится при …
Конструкторы (деструкторы).
Недостатком вышеизложенного метода является отсутствие инициализации объекта (автоматической). Для каждого вновь созданного объекта надо вызывать функцию set либо явным образом присваивать значение данного объекта. Для инициализации объектов класса в его определении можно явным образом включить специальную компонентную функцию – конструктор.
имя_класса (список формальных параметров) {тело конструктора}
/ * прототип */ имя_класса (список формальных параметров); / тело ниже
При создании новых типов данных:
CMyClass (int n = Ø ) – конструктор с параметрами
{num = n;}
Конструктор выделяет память для объекта и инициализирует поля данных.
Конструктор от обычной функции отличается:
-
Конструктор никогда не возвращает значение, даже void.
-
Указатель на конструктор не может быть определен, то есть нельзя получить адрес конструктора.
-
Конструкторы не наследуются.
-
Конструкторы не могут быть описаны с ключевыми словами: virtual, static, const, mutable, volatile.
Конструктор всегда создается для любого класса. Если не определен явно, то вызывается автоматически. По умолчанию создается конструктор без параметров и конструктор копирования. КОНСТРУКТОР может получать любое число параметров. Если конструктор описан явно, то конструктор по умолчанию не создается. В качестве параметра конструктора, но может быть ссылка на него.
Для явного вызова конструктора используются две формы:
1) имя_класса имя_объекта (фактические параметры);
2) имя_класса (фактические параметры);
CMyClass ob1(4);
CMyClass ob1 = CMyClass (4); // вызов объекта без имени
Пример создания объектов
CMyClass ob1, ob2, ob3 [3 ];
Деструктор: ~ имя_класса ( ) {} помещается в определении класса
Смотреть программа
class CMyClass {
public : то же самое
CMyClass ( ) { }
~ CMyClass ( ) { }
};
или
class ---- // ---- {
public : то же самое
CMyClass ( ) ;
~ CMyClass ( ) ;
};
CMyClass :: CMyClass ( ) { cout << “ Это конструктор”;}
CMyClass :: ~ CMyClass ( ) { cout << “ Это деструктор”;}
CMyClass ob1, ob2;
Доступ к полям и методам класса.
Доступ к элементам.
Так как функции – элементы класса, находящиеся в области действия класса, то они могут обращаться к элементам данных просто по имени.
Обычные функции или функции – элементы других классов могут обращаться к элементам, существующего представителя класса с помощью операций ( · или → ).
cout << ob . num;
CMyClass a;
cout << a . num;
Доступ к функциям – элементам класса (методам).
Функции - элементы определенного класса (по аналогии с элементами – полями данных) могут вызываться объектами, представителями своего класса просто по имени.
ob . show ( ) или cout << a . show ( );
int mas [ 3 ], *ptr mas;
ptr mas = & mas [Ø];
ptr mas ++;
(ptr mas = ptr mas+1)
CMyClass *pob, ob1;
pob1 = & ob1;
pob1 → show ( ); ob }
Вызов метода нашего класса через указатель.
Ссылки как псевдоним переменных.
# include <iostream.h>
main ( )
{ int iVar = 888; // инициализация переменных
int *iPtr = iVar; // инициализация указат.
int & iRef = iVar;
int *iRPtr = & iRef;
cout <<iVar;
cout << *iPtr;
cout << iRef;
cout << iPtr; // адрес первой переменной
cout << iRPtr;} // адрес ссылки
После инициализации имя ссылки может использоваться так же, как имя, ассоциированной с ней переменной.
!!! Ссылку после инициализации изменить нельзя !!!
Все обращения к ссылке будут относиться к переменной, именем которой она была проинициализирована.