Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP / lectures / 0_oop.ppt
Скачиваний:
65
Добавлен:
03.03.2016
Размер:
340.99 Кб
Скачать

// ошибка!!! 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;

}

};

Соседние файлы в папке lectures