C++ Клас і об'єкт із прикладом
⚡ Розумний підсумок
Класи та об'єкти в C++ формують основу об'єктно-орієнтованого програмування, де клас визначає план даних та функцій-членів, а об'єкт - це конкретний екземпляр, створений на основі цього плану.

Що таке клас?
A C++ клас поєднує дані та методи для маніпулювання даними в одне ціле. Класи також визначають форми об'єктів. Дані та методи, що містяться в класі, відомі як члени класу. Клас — це визначений користувачем тип даних. Щоб отримати доступ до членів класу, ми використовуємо екземпляр класу. Ви можете бачити клас як план об’єкта.
Клас може бути прототипом будинку. Він показує розташування та розміри дверей, вікон, підлоги тощо. За цими описами ми можемо побудувати будинок. Будинок стає об'єктом. З прототипу можна створити багато будинків. Також з класу можна створити багато об'єктів.
На малюнку вище ми маємо один прототип будинку. З цього прототипу ми створили два будинки з різними функціями.
Маючи на увазі ідею класу як плану, наступним кроком є розгляд того, як він оголошується в коді.
Оголошення класу
In C++Клас визначається за допомогою ключового слова class. Після нього має бути вказана назва класу. Тіло класу додається між фігурними дужками { }.
синтаксис
class class-name { // data // functions };
- Команда ім'я класу – це ім’я, яке потрібно призначити класу.
- Команда дані – це дані для класу, зазвичай оголошувані як змінні.
- Команда Функції є функціями класу.
Оголошення назви та тіла класу, природно, порушує питання про те, хто може використовувати кожен член.
Приватні та відкриті ключові слова
Ви, мабуть, зустрічали ці два ключові слова. Вони є модифікаторами доступу.
Приватна територія:
Коли ключове слово private використовується для визначення функції або класу, воно стає закритим. Такі доступні лише з класу.
Загальнодоступне:
Ключове слово public, з іншого боку, робить дані/функції публічними. Вони доступні поза класом.
Після того, як клас існує, з нього можна створювати об'єкти, подібно до того, як змінні створюються з типу даних.
Визначення об'єкта
Об'єкти створюються з класів. Об'єкти класів оголошуються подібно до оголошення змінних. Спочатку має йти ім'я класу, а потім ім'я об'єкта. Об'єкт має тип класу.
синтаксис
class-name object-name;
- Команда ім'я класу — це назва класу, з якого потрібно створити об'єкт.
- Команда ім'я-об'єкта – це ім’я, яке буде присвоєно новому об’єкту.
Цей процес створення об’єкта з класу відомий як інстанціювання.
Після створення об'єкта, до його публічних членів можна звернутися безпосередньо через простий оператор.
Доступ до елементів даних
Щоб отримати доступ до публічних членів класу, ми використовуємо оператор (.)точка. Це учасники, позначені модифікатором публічного доступу.
Приклад 1
#include <iostream> using namespace std; class Phone { public: double cost; int slots; }; int main() { Phone Y6; Phone Y7; Y6.cost = 100.0; Y6.slots = 2; Y7.cost = 200.0; Y7.slots = 2; cout << "Cost of Huawei Y6 : " << Y6.cost << endl; cout << "Cost of Huawei Y7 : " << Y7.cost << endl; cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl; cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl; return 0; }
вихід:
Ось скріншот коду:
Code Пояснення:
- Включіть файл заголовка iostream у наш код, щоб використовувати його функції.
- Включення простору імен std у наш код, щоб використовувати його класи без його виклику.
- Оголошіть клас під назвою Phone.
- Використання модифікатора публічного доступу, щоб позначити змінні, які ми збираємося створити, як загальнодоступні.
- Оголошення змінної вартості типу даних double.
- Оголошіть цілочисельну змінну з іменем slots.
- Кінець тіла класу.
- Виклик функції main(). Логіку програми слід додати в її тіло.
- Створіть об’єкт з іменем Y6 типу Phone. Це називається інстанціюванням.
- Створіть об’єкт з іменем Y7 типу Phone. Це називається інстанціюванням.
- Доступ до змінної/членської вартості класу Phone за допомогою об’єкта Y6. Значення встановлено на 100.0. Вартість Y6 тепер становить 100.0.
- Доступ до слотів змінних/членів класу Phone за допомогою об’єкта Y6. Значення встановлено на 2. Слотів для Y6 тепер встановлено на 2.
- Доступ до змінної/членської вартості класу Phone за допомогою об’єкта Y7. Значення встановлено на 200.0. Вартість Y7 тепер становить 200.0.
- Доступ до слотів змінних/членів класу Phone за допомогою об’єкта Y7. Значення встановлено на 2. Слотів для Y7 тепер встановлено на 2.
- Надрукуйте вартість Y6 на консолі поряд з іншим текстом.
- Надрукуйте вартість Y7 на консолі поряд з іншим текстом.
- Надрукуйте кількість слотів для Y6 поруч з іншим текстом.
- Надрукуйте кількість слотів для Y7 поруч з іншим текстом.
- Після успішного завершення програма повинна повернути значення.
- Кінець тіла функції main().
Публічні учасники відкриті для зовнішнього коду, але приватні учасники дотримуються набагато суворіших правил доступу.
Що таке приватний клас?
Члени класу, позначені як приватні, можуть бути доступні лише за допомогою функцій, визначених у класі. Будь-який об’єкт або функція, визначена поза класом, не може отримати прямий доступ до таких членів. Доступ до приватного члена класу мають лише функції члена та друга.
Приклад 2
#include <iostream> using namespace std; class ClassA { public: void set_a(int val); int get_a(void); private: int a; }; int ClassA::get_a(void) { return a; } void ClassA::set_a(int val) { a = val; } int main() { ClassA a; a.set_a(20); cout << "Value of a is: " << a.get_a(); return 0; }
вихід:
Ось скріншот коду:
Code Пояснення:
- Включіть файл заголовка iostream у наш код, щоб використовувати його функції.
- Включіть простір імен std у наш код, щоб використовувати його класи без його виклику.
- Створіть клас під назвою ClassA.
- Використовуйте модифікатор публічного доступу, щоб позначити член класу, який буде створено, як загальнодоступний.
- Створіть функцію під назвою set_a(), яка приймає одне ціле значення val.
- Створіть функцію під назвою get_a().
- Використовуйте модифікатор приватного доступу, щоб позначити член класу, який буде створено, як приватно доступний.
- Оголошіть цілочисельну змінну з іменем a.
- Кінець тіла класу.
- Щоб отримати доступ до функції get_a(), використовуйте назву класу та оператор дозволу області видимості. Ми хочемо визначити, що функція робить під час виклику.
- Функція get_a() повинна повертати значення змінної a під час виклику.
- Кінець визначення функції get_a().
- Щоб отримати доступ до функції set_a(), використовуйте назву класу та оператор дозволу області видимості. Ми хочемо визначити, що функція робить під час виклику.
- Присвоєння значення змінної val змінній a.
- Кінець визначення функції set_a().
- Виклик функції main(). Логіку програми слід додати в тіло цієї функції.
- Створіть екземпляр ClassA і дайте йому ім’я a.
- Використовуйте наведений вище екземпляр класу та функцію set_a(), щоб призначити значення 20 змінній a.
- Друк деякого тексту поруч із значенням змінної a на консолі. Значення змінної a отримується викликом функції get_a().
- Після успішного завершення програма повинна повернути значення.
- Кінець тіла функції main().
Захищені члени розташовані між приватними та публічними, додаючи одну ключову можливість для успадкування.
Що таке захищений клас?
Члени класу, позначені як захищені, мають перевагу перед тими, які позначені як приватні. До них можна отримати доступ за допомогою функцій у класі їх визначення. Крім того, до них можна отримати доступ із похідних класів.
Приклад 3
#include <iostream> using namespace std; class ParentClass { protected: int value; }; class ChildClass : public ParentClass { public: void setId(int x) { value = x; } void displayValue() { cout << "Value is: " << value << endl; } }; int main() { ChildClass c; c.setId(21); c.displayValue(); return 0; }
вихід:
Ось скріншот коду:
Code Пояснення:
- Включіть файл заголовка iostream у наш код, щоб використовувати його функції.
- Включіть простір імен std у наш код, щоб використовувати його класи без його виклику.
- Створіть клас під назвою ParentClass.
- Використовуйте модифікатор доступу protected, щоб позначити член класу, який буде створено, як захищений.
- Створіть цілочисельну змінну з іменем value.
- Кінець тіла класу.
- Створіть новий клас під назвою ChildClass, який успадковує ParentClass.
- Використовуйте модифікатор захищеного доступу, щоб позначити член класу, який буде створено, як доступний для дочірніх класів.
- Створіть функцію під назвою setId(), яка приймає одне ціле значення x.
- Присвоєння значення змінної x значенню змінної.
- Кінець визначення функції setId().
- Створіть функцію з назвою displayValue().
- Надрукуйте значення змінної з іменем value на консолі поряд з іншим текстом.
- Кінець тіла функції displayValue().
- Кінець тіла класу з назвою ChildClass.
- Виклик функції main(). Логіку програми слід додати в тіло цієї функції.
- Створіть екземпляр ChildClass і дайте йому ім’я c.
- Використовуйте наведений вище екземпляр класу та функцію setId(), щоб призначити значення 21 змінній x.
- Використовуйте наведений вище екземпляр класу, щоб викликати функцію під назвою displayValue().
- Після успішного завершення програма повинна повернути значення.
- Кінець тіла функції main().
Окрім зберігання даних, клас також групує функції, які працюють з цими даними.
Функції члена класу
Функції допомагають нам маніпулювати даними. Функції-члени класу можна визначити двома способами:
- Всередині визначення класу
- Поза визначенням класу
Якщо функція має бути визначена поза визначенням класу, ми повинні використовувати оператор дозволу області (::). Це має супроводжуватися іменами класів і функцій.
Приклад 4
#include <iostream> #include <string> using namespace std; class Guru99 { public: string tutorial_name; int id; void printname(); void printid() { cout << "Tutorial id is: "<< id; } }; void Guru99::printname() { cout << "Tutorial name is: " << tutorial_name; } int main() { Guru99 guru99; guru99.tutorial_name = "C++"; guru99.id = 1001; guru99.printname(); cout << endl; guru99.printid(); return 0; }
вихід:
Ось скріншот коду:
Code Пояснення:
- Включіть файл заголовка iostream у нашу програму, щоб використовувати його функції.
- Включіть файл заголовка рядка в нашу програму, щоб використовувати його функції.
- Включіть простір імен std у наш код, щоб використовувати його класи без його виклику.
- Створіть клас під назвою Guru99.
- Використайте модифікатор доступу public, щоб позначити члени класу, які ми збираємося створити, як загальнодоступні.
- Створіть рядкову змінну під назвою tutorial_name.
- Створіть цілочисельну змінну з іменем id.
- Створіть функцію з назвою printname(). Ця функція не визначена у визначенні класу.
- Створіть функцію з назвою printid(). Ця функція визначена у визначенні класу. Її тіло було додано у визначення класу.
- Вивести значення ідентифікатора змінної разом з іншим текстом на консолі. Зауважте, що це було додано в тіло функції printid(). Він буде виконано лише під час виклику функції printid().
- Кінець тіла функції printid().
- Кінець тіла класу Guru99.
- Початок визначення функції printname().
- Виведіть значення змінної tutorial_name на консолі поряд з іншим текстом. Зауважте, що це було додано в тіло функції printname(). Він буде виконано лише під час виклику функції printname().
- Кінець визначення функції printname().
- Виклик функції main(). Логіку програми слід додати в тіло цієї функції.
- Створити екземпляр класу Guru99 та давши йому назву guru99.
- Використовуйте наведений вище приклад, щоб призначити значення C++ до змінної tutorial_name.
- Використовуйте екземпляр guru99, щоб призначити значення 1001 змінній id.
- Використовуйте екземпляр guru99 для виклику функції printname() .
- Викличте команду end (кінець рядка), щоб надрукувати новий порожній рядок на консолі.
- Використовуйте екземпляр guru99 для виклику функції printid().
- Після успішного завершення програма повинна повернути значення.
- Кінець тіла функції main().
Дві спеціальні функції-члени запускаються автоматично, коли об'єкт створюється та коли він знищується.
Конструктори та деструктори
Що таке конструктор?
Конструктори – це спеціальні функції, які ініціалізують об'єкти. C++ компілятори викликати конструктор під час створення об'єкта. Конструктори допомагають присвоювати значення членам класу. Звичайно, це відбувається після того, як їм було виділено певний простір пам'яті.
Що таке деструктор?
З іншого боку, деструктори допомагають знищувати об’єкти класу.
Ім'я конструктора має бути схоже на ім'я класу. Конструктори не мають типу повернення.
Конструктор може бути визначений всередині або поза тілом класу. Якщо визначено поза тілом класу, його слід визначити за допомогою імені класу та оператора дозволу області (::).
Приклад 5
#include <iostream> using namespace std; class ClassA { public: ClassA() { cout << "Class constructor called"<<endl; } ~ClassA() { cout << "Class destructor called"<<endl; } }; int main() { ClassA a; int p = 1; if (p) { ClassA b; } }
вихід:
Ось скріншот коду:
Code Пояснення:
- Включіть файл заголовка iostream у код, щоб використовувати його функції.
- Включіть простір імен std у наш код, щоб використовувати його класи без його виклику.
- Створіть клас під назвою ClassA.
- Використовуйте модифікатор публічного доступу, щоб позначити учасника, якого ми збираємось створити, як загальнодоступного.
- Створіть конструктор для класу.
- Текст для друку на консолі під час виклику конструктора. Endl - це a C++ ключове слово, що означає кінцевий рядок. Він переміщує курсор миші на наступний рядок.
- Кінець тіла конструктора класу.
- Створіть деструктор для класу.
- Текст для друку на консолі під час виклику деструктора. Endl - це a C++ ключове слово, що означає кінцевий рядок. Він переміщує курсор миші на наступний рядок.
- Кінець корпусу деструктора.
- Кінець тіла класу.
- Виклик функції main(). Логіку програми слід додати в тіло цієї функції.
- Створіть об’єкт класу та дайте йому ім’я a. Буде викликаний конструктор.
- Створіть цілочисельну змінну з іменем p і присвойте їй значення 1.
- Створіть блок оператора if за допомогою змінної p.
- Створіть об’єкт класу та дайте йому ім’я b. Буде викликано деструктор.
- Кінець тіла оператора if.
- Кінець тіла функції main().








