C++ Клас і об'єкт із прикладом
Що таке клас?
A C++ клас поєднує дані та методи для маніпулювання даними в одне ціле. Класи також визначають форми об'єктів. Дані та методи, що містяться в класі, відомі як члени класу. Клас — це визначений користувачем тип даних. Щоб отримати доступ до членів класу, ми використовуємо екземпляр класу. Ви можете бачити клас як план об’єкта.
Клас буде прототипом для будинку. Він показує розташування та розміри дверей, вікон, підлоги тощо. За цими описами ми можемо побудувати будинок. Будинок стає об'єктом. З прототипу можна створити багато будинків. Крім того, з класу можна створити багато об’єктів.
На малюнку вище ми маємо один прототип будинку. З цього прототипу ми створили два будинки з різними функціями.
Оголошення класу
У 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; }
вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка 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; }
вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка 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; }
вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка iostream у наш код, щоб використовувати його функції.
- Включіть простір імен std у наш код, щоб використовувати його класи без його виклику.
- Створіть клас під назвою ParentClass.
- Використовуйте модифікатор доступу protected, щоб позначити член класу, який буде створено, як захищений.
- Створіть цілочисельну змінну з іменем value.
- Кінець тіла класу.
- Створіть новий клас під назвою ChildClass, який успадковує ParentClass.
- Використовуйте модифікатор захищеного доступу, щоб позначити член класу, який буде створено, як доступний для дочірніх класів.
- Створіть функцію під назвою setId(), яка приймає одне ціле значення x.
- Присвоєння значення змінної x значенню змінної.
- Кінець визначення функції setId().
- Створіть функцію з назвою displayValue().
- Надрукуйте значення змінної з іменем value на консолі поряд з іншим текстом.
- Кінець тіла функції displayValue().
- Кінець тіла класу з назвою ChildClass.
- Виклик функції main(). Логіку програми слід додати в тіло цієї функції.
- Створіть екземпляр ChildClass і дайте йому ім’я c.
- Використовуйте наведений вище екземпляр класу та функцію setId(), щоб призначити значення 21 змінній x.
- Використовуйте наведений вище екземпляр класу, щоб викликати функцію під назвою displayValue().
- Після успішного завершення програма повинна повернути значення.
- Кінець тіла функції main().
Функції члена класу
Функції допомагають нам маніпулювати даними. Функції-члени класу можна визначити двома способами:
- Всередині визначення класу
- Поза визначенням класу
Якщо функція має бути визначена поза визначенням класу, ми повинні використовувати оператор дозволу області (::). Це має супроводжуватися іменами класів і функцій.
Приклад 2
#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; }
вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка iostream у нашу програму, щоб використовувати його функції.
- Включіть файл заголовка рядка в нашу програму, щоб використовувати його функції.
- Включіть простір імен std у наш код, щоб використовувати його класи без його виклику.
- Створіть клас під назвою Guru99.
- Використовуйте модифікатор публічного доступу, щоб позначити членів класу, які ми збираємось створити, як загальнодоступні.
- Створіть рядкову змінну під назвою tutorial_name.
- Створіть цілочисельну змінну з іменем id.
- Створіть функцію з назвою printname(). Ця функція не визначена у визначенні класу.
- Створіть функцію printed(). Ця функція визначена у визначенні класу. Його тіло було додано до визначення класу.
- Вивести значення ідентифікатора змінної разом з іншим текстом на консолі. Зауважте, що це було додано в тіло функції 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().
Конструктори та деструктори
Що таке конструктори?
Конструкції - це спеціальні функції, які ініціалізують об'єкти. The C++ компілятори викликає конструктор під час створення об'єкта. Конструктори допомагають призначати значення членам класу. Звичайно, це після того, як їм було виділено деякий простір пам’яті.
Що таке деструктори?
З іншого боку, деструктори допомагають знищувати об’єкти класу.
Ім'я конструктора має бути схоже на ім'я класу. Конструктори не мають типу повернення.
Конструктор може бути визначений всередині або поза тілом класу. Якщо визначено поза тілом класу, його слід визначити за допомогою імені класу та оператора дозволу області (::).
Приклад 3
#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; } }
вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка iostream у код, щоб використовувати його функції.
- Включіть простір імен std у наш код, щоб використовувати його класи без його виклику.
- Створіть клас під назвою ClassA.
- Використовуйте модифікатор публічного доступу, щоб позначити учасника, якого ми збираємось створити, як загальнодоступного.
- Створіть конструктор для класу.
- Текст для друку на консолі під час виклику конструктора. Endl - це a C++ ключове слово, що означає кінцевий рядок. Він переміщує курсор миші на наступний рядок.
- Кінець тіла конструктора класу.
- Створіть деструктор для класу.
- Текст для друку на консолі під час виклику деструктора. Endl - це a C++ ключове слово, що означає кінцевий рядок. Він переміщує курсор миші на наступний рядок.
- Кінець корпусу деструктора.
- Кінець тіла класу.
- Виклик функції main(). Логіку програми слід додати в тіло цієї функції.
- Створіть об’єкт класу та дайте йому ім’я a. Буде викликаний конструктор.
- Створіть цілочисельну змінну з іменем p і присвойте їй значення 1.
- Створіть блок оператора if за допомогою змінної p.
- Створіть об’єкт класу та дайте йому ім’я b. Буде викликано деструктор.
- Кінець тіла оператора if.
- Кінець тіла функції main().
Підсумки
- C++ є об'єктно-орієнтованим.
- Заняття формують основні ознаки C++ що робить його об'єктно-орієнтованим.
- A C++ клас поєднує дані та методи для маніпулювання даними в одне ціле.
- Клас — це план об'єкта.
- Класи визначають форму об'єкта.
- Дані та методи, що містяться в класі, відомі як члени класу.
- Щоб отримати доступ до членів класу, ви повинні використовувати екземпляр класу.
- Щоб створити клас, ми використовуємо ключове слово class.
- Функції-члени класу можуть бути визначені всередині або поза класом.