- •1 Директиви препроцесора. Багатомодульне програмування
- •1.1 Мета роботи
- •1.2 Вказівки щодо організації самостійної роботи студентів
- •1.7 Контрольний приклад
- •2.1 Мета роботи
- •2.2 Вказівки щодо організації самостійної роботи студентів
- •2.3 Порядок виконання роботи
- •2.4 Контрольні запитання та завдання
- •2.5 Завдання
- •2.6 Варіанти завдань
- •2.7 Контрольний приклад
- •3 Файлові потоки мови с
- •3.1 Мета роботи
- •3.2 Вказівки щодо організації самостійної роботи студентів
- •Ввод и вывод символов
- •Ввод и вывод строк
- •Ввод и вывод записей
- •Управление указателем файла
- •Состояние потока
- •Форматированный вывод
- •Форматированный ввод
- •Другие функции форматного ввода и вывода
- •Примеры
- •3.3 Порядок виконання роботи
- •3.4 Контрольні запитання та завдання
- •3.5 Завдання
- •3.6 Варіанти завдань
- •3.7 Контрольний приклад
- •4 Перегрузка операцій
- •4.1 Мета роботи
- •4.2 Вказівки щодо організації самостійної роботи студентів
- •5.1 Мета роботи
- •5.2 Вказівки щодо організації самостійної роботи студентів Классы и объекты
- •Инкапсуляция
- •Конструктор
- •Деструктор
- •Указатели на объекты
- •Операции new и delete
- •5.3 Порядок виконання роботи
- •5.4 Контрольні запитання та завдання
- •5.5 Завдання
- •5.6 Варіанти завдань
- •5.7 Контрольний приклад
- •Уровни доступа
- •Виртуальные функции
- •Механизм работы виртуальных функций
- •Полиморфизм
- •Множественное наследование
- •6.7 Контрольний приклад
- •Рекомендована література
- •61166 Харків, просп. Леніна, 14.
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; // работает конструктор без параметров
}
Если программист не определил конструктор, транслятор сам строит конструктор по умолчанию, который не имеет параметров и ничего не делает. При наличии в классе других конструкторов конструктор без параметров требует от программиста явного определения.