Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Все для модуля 3.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
61.67 Кб
Скачать

Параметри головної функції 0

Запустити програму на виконання можна не тільки засобами системи програмування або файлового менеджера. Будь-яка операційна система дозволяє запустити програму в так званому командному рядку, або рядку виклику.

У заголовку функції main() можна записати два параметри: перший типу int, другий типу char** або char*[] (тобто вказівник на вказівники на символи). Тоді на початку виконання головної функції значеннями параметрів стають, відповідно, кількість слів у рядку виклику й адреса першого елемента в масиві вказівників на рядки. За традицією, параметри програми мають імена argc (типу int) і argv (типу char**).

int main(int argc, char **argv)

Структури

Зображувати об’єкти, що мають кілька складових частин (компонент), можна у вигляді структур. Розглянемо оголошення імені типу структур для точок.

struct Point { double x; double y; };

Змінна структурного типу називається структурою, а її складові частини – полями. Значенням структури є послідовність значень її полів.

Поля структури, на яку встановлено вказівник, можна ідентифікувати в два способи. Перший використовує операцію взяття адреси *, другий – операцію непрямого доступу зі знаком ->. Наприклад, якщо вказівник Point* p встановлено на деяку змінну, то її поля можна позначити (*p).x, (*p).y або наочніше p->x, p->y. Аналогічно можна присвоїти значення полям структури *p.

Класи

Тип, заданий цілісним виразом, що описує значення й операції типу й забезпечує захист змінних цього типу від недопустимого доступу, у мові С++ називається класом, а змінна цього типу – об’єктом. «Поля-функції» класу називаються методами класу.

Поля-дані й виклики методів класу позначаються однаково – їх вказують після імені об’єкта й крапки. Наприклад, якщо p – ім’я об’єкта типу Point, то вираз p.x позначає поле x об’єкта p, а вираз p.input() – виклик функції input для обробки об’єкта p.

Методи класу створюються в одному екземплярі незалежно від кількості об’єктів у програмі. Отже, метод не є складовою частиною об’єкта.

У виклик методу передається адреса об’єкта, якому належить виклик, як неявний додатковий аргумент. Відповідний неявний параметр методу є вказівником на об’єкт і має ім’я this. За допомогою цього вказівника можна, в разі необхідності, в тілі методу явно позначити об’єкт, якому належить виклик, і його поля. Вираз *this позначає об’єкт, а вирази, наприклад, (*this).x або this->y у методах класу Point – поля об’єкта.

  • Клас – це, з одного боку, тип даних, для якого задано множину значень і допустимі операції, а з іншого – оголошення, що описує дані та операції (неформально, це опис певного поняття).

  • Об’єкт, або екземпляр класу, – це змінна типу, що є класом.

  • Атрибут (класу, об’єкта) – це поле даних, як правило, приховане.

  • Метод (класу, об’єкта) – це функція, оголошена як поле в класі. Метод може бути відкритим або прихованим.

  • Член класу – це атрибут або метод. Термін «член класу» – синонім терміну «поле класу».

  • Інтерфейс класу – це сукупність відкритих методів класу, тобто, неформально, опис, як обробляти об’єкти класу або як взаємодіяти з ними.

  • Інкапсуляція – це оголошення даних і операцій їх обробки у вигляді цілісної структурної одиниці, яка забезпечує захист даних від будь-якого використання, окрім як за допомогою вказаних операцій, тобто унеможливлює обробку даних за межами цих операцій. Прицип інкапсуляції полягає в організації даних і операцій їх обробки на основі інкапсуляції.

Розділи полів. У класі може бути скільки завгодно розділів, що починаються заголовками public: або private:. Якщо на початку тіла класу жодного з цих заголовків немає, то поля до найближчого заголовку є прихованими.

Схожість і відмінність класів і структур. У структурах, як і в класах, можуть бути поля-функції, що реалізуються як вбудовані або окремо, а також довільна кількість розділів із заголовками public: або private:. Проте, якщо на початку тіла структури жодного з цих заголовків немає, то поля до найближчого заголовка є відкритими.

Конструктори й деструктор

Компілятор, створюючи «машинний варіант» класу, додає до методів, оголошених у класі, ще чотири – стандартний конструктор, стандартний конструктор копії, метод присвоювання й стандартний деструктор.

  • Конструктор – це метод класу, що неявно викликається відразу після того, як створено об’єкт цього класу.

  • Деструктор, – це метод класу, що неявно викликається перед тим, як знищується об’єкт цього класу.

Якщо створюється глобальний об’єкт, тобто означений за межами функцій програми, стандартний конструктор надає атрибутам об’єкта нульові значення. Якщо ж об’єкт є локальним у функції, то його атрибути не ініціалізуються, тобто залишаються «випадковим сміттям».

Стандартний конструктор викликається неявно, коли виконується інструкція означення об’єкта без його ініціалізації, наприклад, інструкція Point p;.

Стандартний конструктор копії копіює значення всіх атрибутів вже існуючого об’єкта в створюваний.

Конструктор копії викликається в таких ситуаціях:

1. Оголошений об’єкт ініціалізується за допомогою іншого об’єкта, наприклад, Point p2=p1, p3(p1);.

2. Параметр-значення функції є змінною, яка існує протягом виконання виклику функції. На початку виконання виклику ця змінна створюється й ініціалізується значенням аргументу, вказаного у виклику. Якщо параметр є об’єктом, ці дії виконує конструктор копії.

Стандартний деструктор викликається, перед тим, як об’єкт знищується. Це відбувається, коли закінчується виклик функції, а об’єкт є локальним у ній, або коли закінчується виконання програми, а об’єкт є глобальним.

У класі можна означати власні конструктори, в яких описуються дії, зв’язані, головним чином, з ініціалізацією атрибутів об’єкта.

Дії, описані в конструкторі, виконуються після створення об’єкта.

Конструктор оголошується як відкритий метод класу. Його іменем є ім’я класу, а в заголовку немає типу значень, що повертаються. Можна означити кілька конструкторів з різними заголовками.

Приклад. Додамо до класу Point, означеного вище, три конструктори, що забезпечують три різні форми ініціалізації об’єктів-точок.

class Point {

private : double x, y;

public:

Point(); /*1*/

Point(double); /*2*/

Point(double, double); /*3*/

...

};

Ім’я атрибуту й ініціалізуючий вираз у дужках утворюють ініціалізатор.

Якщо в класі оголошено хоча б один конструктор, то стандартний конструктор не створюється. Звідси, якщо в класі немає конструктора без параметрів, то звичайне оголошення об’єкта, як Point p;, стає помилковим.