Клас. Основні поняття

Тема класів є одночасно і складною, і простою. Якщо ви добре освоїли такі теми як структура та функції, то тема класів не буде викликати труднощів.

В першу чергу варто розібратися, що таке клас та навіщо він необхідний.

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

Відповідно, клас може в собі зберігати не тільки якусь інформацію, а і виконувати з нею дії.

Змінні типу клас називають

Функції класу називаються

Створювати класи необхідно за межами головної функції

Для того щоб створити клас необхідно:

1. Вказати ключове слово

2. Вказати ім’я класу.

3. У фігурних дужках вказати змінні та методи класу. Після закриваючої дужки потрібно поставити крапку з комою

Наприклад:

    
            class Ім’я_класу
            {
                //змінні та методи класу;
            };
        
    

«Ім’я класу» прийнято писати з великої літери.

Коли ви будете створювати змінні типу то вам необхідно:

1. Вказати ім’я класу.

2. Ім’я змінної типу клас.

3. Також, можна ініціалізувати змінні класу. Це є не обов’язковим. Розглянемо дані ситуації в наступних уроках.

4. Не забуваємо в кінці поставити крапку з комою

Наприклад:


        Ім’я_класу ім’я_змінної_типу_клас;
        

З класами вам доведеться дуже часто працювати. Жоден великий проект не обійдеться без них.

Наприклад, ви хочете написати свій інтернет магазин (мова для цього не зовсім підходить, але нам головне суть). Вам потрібно вказати такі параметри (описати якусь інформацію) як товару, його вартість та опис. Для таких задач достатньо застосувати структуру АЛЕ ми також маємо добавити можливість купити даний товар, тобто, добавити у кошик, а також видалити з кошика. Це можна реалізувати за допомогою функцій. Тобто, вам доведеться ОКРЕМО створити структуру яка буду містити інформацію про товар і функції які товар кошик. Для того щоб не розділяти це на окремі частини коду ми і можемо використати клас. Оскільки, він дозволить тримати це все в одному місці.

Наведемо ще один приклад.

Ви хочете описати собак. Зауважте, а не Відповідно, ми можемо описати кожну собаку і надати їй можливість виконувати якісь команди. Для опису використаємо змінні які зберігатимуть інформацію про собаки, її вік, стать. А, також як і кожна собака вона може гавкати та для прикладу виконувати команду

Для того щоб звернутися до змінних чи методів класу варто використовувати оператор Для цього ми маємо:

1. Вказати змінної типу клас.

2. Поставити оператор

3. Обрати змінну або метод класу. Не забуваємо, що методи це по факту функції. Тому, в кінці варто поставити круглі дужки.

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

Класи мають свої типи видимості змінних. Їх називають Відповідно, в залежності від модифікатора доступу ви використовувати певні змінні або методи. Є такі модифікатори:

1. «public». Сама назва говорить, що (компоненти класу) є доступними за межами класу. Не варто це плутати з глобальними змінними. Звернутися публічний компонент класу можна лише за допомогою об’єкту класу (як описано раніше). До таких компонентів можна звернутися на пряму.

2. «private». Це приватні класу (компоненти класу). До даних компонентів ви не зможете звернутися на пряму. Класи не видають приватну інформацію. Будь як клас. Все, що приватне має таким і залишитися За замовчуванням, всі елементи класу є приватними.

3. «protected». Це захищені класу. Зараз ми не будемо їх розглядати.

Як вже було вказано, то всі елементи класу є по замовчуванню приватними. Для того щоб змінити їх модифікатор доступу необхідно вказати його (відповідне ключове слово: чи Після цього, всі змінні та методи які йдуть після вказаного модифікатора матимуть його зону видимості. Тому, не потрібно для кожної вказувати свій модифікатор. Крім випадків, коли вони мають бути різними.

Створимо клас і розберемося як він працює.

    
            #include <iostream>

            //створюємо клас з ім'ям "Dog"
            class Dog
            {
                //тут не має вказаного модифікатору доступу
                //тому використовується модифікатор за замовчуванням
                //тобто, модифікатор "private"
                std::string color;

                //тепер ми явно вказали модифікатор доступу
                //і всі методи класу будуть тепер мати його
                public:
                std::string name;

                //створюємо метод класу
                //як бачите він виглядає як звичайна функція
                void gav()
                {
                    std::cout << "GAV GAV GAV" << std::endl;
                }

                //ставимо приватний модифікатор доступу
                //тому наступні змінні/методи не можна буде
                //використовувати за межами класу
                private:
                void sleep()
                {
                    std::cout << "Zzz" << std::endl;
                }
            };

            int main()
            {
                //створюємо змінну типу клас Dog
                //тобто, ми створили об'єкт класу
                Dog dog;

                std::cout << "input name: " << std::endl;
                //отримуємо прямий доступ до змінної класу
                //це можливо за рахунок того, що вона є публічною
                std::cin >> dog.name;

                std::cout << dog.name << std::endl;
                //викликаємо (використовуємо) метод класу
                dog.gav();

                //ми не можемо використати даний метод, бо він є приватним
                //dog.sleep();

                return 0;
            }
        

Гаразд. Логіка як застосовувати публічні методи та змінні доволі проста та зрозуміла. Але багато хто задумався потрібні приватні як їх не можна На справді їх можна використовувати але не на пряму. Ці необхідні для уникнення випадкових помилок.

Для того щоб надати значення або використати значення приватних змінних використовують публічні методи.

Наприклад:

    
            #include <iostream>

            //створюємо клас з ім'ям "Dog"
            class Dog
            {
                //оскільки ми не вказували модифікатор доступу
                //то він береться за замовчуванням "private"
                std::string _name;

                public:
                //ми вказали модифікатор доступу "public"
                //тому дані методи класу будуть доступними
                void input()
                {
                    //зверніть увагу. змінну "_name" можемо тут використовувати
                    //хоча вона створена в іншому місці
                    //тобто, вона є немов глобальною у межах класу
                    std::cout << "input name: " << std::endl;
                    std::cin >> _name;
                }

                void display()
                {
                    //демонструємо значення змінної "_name"
                    std::cout << "name: " << _name << std::endl;
                }

            };

            int main()
            {
                Dog dog;

                //за допомогою публічних методів ми можемо:

                //надавати значення приватним змінним
                dog.input();

                //або використовувати це значення
                dog.display();

                return 0;
            }
        

Створюючи змінні в класі ви також можете їх ініціалізувати (надати їм якесь значення).

    
            #include <iostream>

            class Dog
            {
                std::string _name = "Kit :))";

                public:
                void display()
                {
                    //демонструємо значення змінної "_name"
                    std::cout << "name: " << _name << std::endl;
                }
            };

            int main()
            {
                Dog dog;
                dog.display();

                return 0;
            }
        

В даному уроці ми частково розглянули як створювати, реалізовувати та застосовувати методи класу. Пізніше ми розглянемо це детальніше.