Структура

В реальному житті дуже багато інформації яка є пов’язана між собою. Також велику кількість речей можна описати приблизно однаково. Наприклад, стіл ми можемо описати враховуючи такі його характеристики: висота, ширина, довжина, колір, матеріал з якого виготовлений. Цей опис можна застосувати для столу і багатьох інших речей. Або на приклад у вас є однокласники/одногрупники/колеги. Їх також можна описати використовуючи однакову інформацію: прізвище, ріст, вага, дата народження.

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

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

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

Створити структуру можна так: у фігурних дужках створюємо всі змінні які може використовувати структура; в кінці після закриваючої фігурної дужки ставимо крапку з комою

Наприклад, структура яка описуватиме кота структури буде і буде мати в собі дві змінні: оскільки це буде слово, то тип змінної буде стрічка та оскільки це буде ціле число, то будемо мати відповідний тип Виглядатиме так:

    
            struct Cat
            {
                std::string name;
                int age;
            };
        
    

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


        ім’я_структури ім’я_змінної

Наприклад, створимо змінну з іменем і в якості її типу візьмемо нашу структуру


        Cat kit;
        

Тепер, якщо вам необхідно використати/записати якусь інформацію в середину структури (тобто, у змінні які знаходяться в структурі), то необхідно до них звернутися. Це зробити доволі просто. Після «імені змінної типу структура» потрібно поставити крапку та обрати необхідну змінну зі структури.

Наприклад, ми можемо вказати, що нашого кота звати і йому роки. Для цього після змінної потрібно поставити крапку та звернутися до необхідних змінних.

    
            kit.name = "Myrko";
            kit.age = 2;
        
    

Повноцінна програма виглядатиме так:

    
            #include <iostream>
            //Створюємо структуру з іменем Cat
            struct Cat
            {
                //змінні структури
                std::string name;
                int age;
            };

            int main()
            {
                //сторюємо змінну типу структура Cat. ім'я змінної kit
                Cat kit;

                //ми можемо отримати інформацію від користувача
                std::cout << "input name cat" << std::endl;
                std::cin >> kit.name;
                std::cout << "input age cat" << std::endl; 
                std::cin >> kit.age;

                //або записати її самостійно
                //kit.name = "Myrko";
                //kit.age = 2;

                //використовуємо інформацію зі структури
                std::cout << "name: " << kit.name << "\nage: " << kit.age;
                return 0;
            }
        
    

Ви можете створити декілька змінних з типом структура.

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

    
            struct Cat
            {
                //змінні структури зі значенням по замовчуванню
                std::string name = "Myrko";
                int age = 2;
            };
        
    

Такі змінні можна використовувати відразу.

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

    
            #include <iostream>

            //Створюємо структуру з іменем Cat
            struct Cat
            {
                //змінні структури зі значеннями по замовчуванню
                std::string name = "Myrko";
                int age = 2;
            };

            int main()
            {
                //сторюємо змінну типу структура Cat. ім'я змінної kit
                Cat kit;

                //ми можемо отримати інформацію від користувача
                std::cout << "input name cat" << std::endl;
                std::cin >> kit.name;
                std::cout << "input age cat" << std::endl;
                std::cin >> kit.age;

                Cat kotuk;
                //присвоюємо значення змінної kit у змінну kotuk
                kotuk = kit;

                //використовуємо інформацію зі структури
                //та переконуємос, що змінні однакові
                std::cout << "\nkit:\nname: " << kit.name << "\nage: " << kit.age;
                std::cout << "\n\nkotuk:\nname: " << kotuk.name << "\nage: " << kotuk.age;
                return 0;
            }
        
    

Також ви можете використовувати змінні однієї структури в іншій. Для цього необхідно лише створити змінну типу структура (яку ви хочете використовувати) в серединні іншої структури (в тій де збирається використовувати). До таких змінних доводиться звертатися через внутрішню зміну.

    
            #include <iostream>
            struct Name_Cat
            {
                std::string name;
            };

            struct Cat
            {
                int age;
                //створюємо змінну типу структура в середині іншої структури
                Name_Cat name_cat;
            };

            int main()
            {
                Cat kit;
                kit.age = 3;

                //присвоюємо значення змінній, що знаходиться в середині структури
                //зверніть увагу, що використовуємо внутрішню змінну
                kit.name_cat.name = "Kysach";

                std::cout << "name: " << kit.name_cat.name << "\nage: " << kit.age;
                return 0;
            }
        
    

Ви можете створювати структуру в середині іншої структури. Для того, щоб використовувати змінні з внутрішньої структури потрібно буде створити змінну через яку будете звертатися до внутрішньої структури (тобто, створити змінну з типом внутрішньої структури).

    
            #include <iostream>
            struct Cat
            {
                int age;

                //створюємо структуру в середині іншої структури
                struct Name_Cat
                {
                    std::string name;
                };

                //для того щоб використовувати внутрішню структуру потрібно створити змінну
                Name_Cat name_cat;
            };

            int main()
            {
                Cat kit;
                kit.age = 3;

                //присвоюємо значення змінній, що знаходиться в середині структури
                kit.name_cat.name = "Kysach";

                std::cout << "name: " << kit.name_cat.name << "\nage: " << kit.age;
                return 0;
            }