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

Описание класса

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.

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

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