Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Лекции по объектно-ориентированному программированию (С++).doc
Скачиваний:
150
Добавлен:
02.05.2014
Размер:
226.82 Кб
Скачать

Инициализация полей данных.

Для того, чтобы предусмотреть инициализацию переменных в программе, надо написать специальную функцию – метод класса (access).

set_num (int n) поле_data = переменная;

{num = n ;}

Присваивание полей производится при …

Конструкторы (деструкторы).

Недостатком вышеизложенного метода является отсутствие инициализации объекта (автоматической). Для каждого вновь созданного объекта надо вызывать функцию set либо явным образом присваивать значение данного объекта. Для инициализации объектов класса в его определении можно явным образом включить специальную компонентную функцию – конструктор.

имя_класса (список формальных параметров) {тело конструктора}

/ * прототип */ имя_класса (список формальных параметров); / тело ниже

При создании новых типов данных:

CMyClass (int n = Ø ) – конструктор с параметрами

{num = n;}

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

Конструктор от обычной функции отличается:

  1. Конструктор никогда не возвращает значение, даже void.

  2. Указатель на конструктор не может быть определен, то есть нельзя получить адрес конструктора.

  3. Конструкторы не наследуются.

  4. Конструкторы не могут быть описаны с ключевыми словами: 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;} // адрес ссылки

После инициализации имя ссылки может использоваться так же, как имя, ассоциированной с ней переменной.

!!! Ссылку после инициализации изменить нельзя !!!

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