Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МВ_Прог_1курс_2часть.doc
Скачиваний:
8
Добавлен:
09.09.2019
Размер:
1.02 Mб
Скачать

5.1 Мета роботи

5.2 Вказівки щодо організації самостійної роботи студентів Классы и объекты

Класс это такой программный тип, который определяет не только данные, но и функции, применимые к этим данным. Говорят, что данные задают состояние объекта, а функции – его поведение.

В С++ объявление класса похоже на структуру в языке С, но, помимо компонентов-данных, включает компоненты-функции, которые также называют методами.

Пример. Объявление класса “дата”. Хранит день, месяц, год. Способен установить дату, сообщить ее, и изменить на следующую.

class date

{

public:

int day, month, year;

void set (int, int, int);

void get (int&, int&, int&);

void next ();

};

Определение функций-компонент можно расположить внутри или за пределами объявления класса. В первом случае транслятор попытается создать функции inline. Во втором — имени определяемой функции должно предшествовать имя класса вместе с операцией разрешения видимости.

Все данные класса доступны из методов того же класса.

Пример. Определение функции-члена date::set, расположенное за пределами объявления класса.

void date::set (int d, int m, int y) {

day = d;

month = m;

year = y;

}

Класс представляет собой тип данных. Сами же данные такого типа называют экземплярами класса или объектами. Каждый объект имеет собственную копию всех данных класса. Чтобы создать объект в памяти, его надо определить, например,

date d;

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

cout << d.day;

d.set(19,10,2001);

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

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

Спецификации доступа 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();

};

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

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

void 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; // работает конструктор без параметров

}

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