Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МВ_Прог_1курс_2n1часть.doc
Скачиваний:
11
Добавлен:
13.04.2015
Размер:
735.74 Кб
Скачать

Инкапсуляция

Инкапсуляция в объектно-ориентированном программировании — это сокрытие деталей реализации класса. Класс вводит еще одну область видимости (другие области это файл, функция, блок, прототип функции, пространство имен). В пределах класса видимы все его компоненты, за пределами — только некоторые.

Спецификации доступа public и private регулируют видимость компонент извне.

Пример. Данные класса date скрыты от пользователя, а методы открыты.

class date

{

private:

int day, month, year;

public:

void set (int,int,int);

...

};

Члены класса всегда можно именовать, применяя операцию разрешения области видимости, например, вместо

int day, month, year;

в объявлении класса можно написать

int date::day, date::month, date::year;

но обычно операция разрешения видимости применяется за пределами объявления класса.

Конструктор

После создания объекта в памяти все его данные должны получить значения. Конструктор — это функция, специально предназначенная для инициализации объекта. Конструктор носит то же имя, что и класс и не возвращает значения. Класс может иметь несколько конструкторов.

Пример. Класс с тремя конструкторами.

class date {

int day, month, year;

public:

date(int,int,int);

date(char*);

date();

};

Конструктор вызывается тогда, когда создается объект. Благодаря конструкторам, оператор объявления в С++ вызывает выполнение действий.

Примеры инициализации объектов:

int main(int argc, char* argv[])

{

date d1 = date(19, 10, 2001);

date d2(19, 10, 2001); // то же, но сокращенно

date d3 = date("19-Oct-2001");

date d4 = "19-Oct-2001"; // когда в конструкторе ровно 1 параметр

date d5; // работает конструктор без параметров

return 0;

}

Если программист не определил конструктор, транслятор сам строит конструктор по умолчанию, который не имеет параметров и ничего не делает. При наличии в классе других конструкторов конструктор без параметров требует от программиста явного определения.

Деструктор

Деструктор решает задачу, обратную задаче конструктора. Он вызывается всякий раз, когда объект уничтожается. Имя деструктора состоит из знака тильды “~” и имени класса. Например,

~date() .

Деструктор не имеет аргументов и не возвращает значения. Компилятор сам генерирует деструктор, если программист его не определил. Когда объект выходит из области видимости, деструктор вызывается автоматически.

Указатели на объекты

Объявление date* p создает указатель на объект класса date. Если p указывает на объект, обратиться к его членам можно при помощи операций (*p).set(), но для этого существует специальная операция косвенного выбора

p->set()

Указателю можно присвоить адрес уже существующего объекта.

date d1;

date* p = &d1;

Каждый объект имеет указатель на себя, который обозначается идентификатором this. Он является скрытым параметром каждой функции-члена. Для класса X указатель this имеет тип:

X* const this;

Функцию-член можно объявить так, чтобы поля объекта были доступны ей только для чтения

int readme() const {/*тело функции*/};

Указатель this, передаваемый такой функции, будет иметь тип:

const X *const this.