C Класи розвитку та успадкування

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

гоночний автомобіль

Дотепер ви пізнали значну частину основного словника С ++ та застосували його досить елементарно. На практиці програми на C ++ зазвичай складаються в основному з класів. Розробники зосереджуються на створенні класів, пристосованих до конкретних потреб даного завдання. Після створення класів вони використовуються як типи даних для визначення змінних. Ці змінні називаються об'єктами, і вони потім використовуються в рамках програми.

Після того, як ми створили новий, порожній проект з main.cpp, як завжди, ми створюємо файл заголовка з іменем class.

Клас оголошується лише у файлі заголовка. Тож упорядник знає, що пізніше з’явиться клас, який називатиметься гоночними автомобілями. Ключове слово public означає, що те, що нижче, доступне ззовні. З іншого боку, Private означає, що наведений нижче код можна викликати лише в самому класі. Є ще захищений, але він відіграє лише роль у спадкуванні. Для самого класу захищений еквівалент приватного. У прикладі визначено цілочисельну змінну kmh. Її слід читати ззовні, використовуючи метод отримання (int speed (void);). Методи rennwagen (); та гоночний автомобіль (int kmh); є 2 конструкторами класу. Тут конструктор був перевантажений як із функціями. Залежно від параметрів, з якими створюється екземпляр класу, компілятор вирішує, який із двох слід викликати. Конструктор гоночного автомобіля (int kmh); не тільки запускає візок, але й безпосередньо натискає на педаль і розганяється до 200 км/год. Деструктор

гоночний автомобіль(); викликається, коли екземпляр знищується за допомогою видалення або програма припиняється. За допомогою методів void accelerate (int kmh);, void brake (void); та внутрішня швидкість (void); застосовуються ті самі правила, що і для звичайних функцій. Далі ми створюємо файл klasse.cpp в розділі Source Files. Тут з’являється код самого класу.

Спочатку визначається конструктор rennwagen: rennwagen () <>. Оскільки він завжди повертає об'єкт (а саме себе), перед ним не розміщується тип даних. У конструкторі внутрішня змінна kmh адресована ключовим словом this та встановлена ​​на 0. Це завжди вказівник на ваш власний клас, і змінні та методи можуть бути доступні всередині класу. На консолі також виводиться текст.

Потім визначається деструктор класу. Ви можете впізнати це за тим, що він має точно те саме ім'я, що і конструктор, з тією різницею, що він має тильду

стоїть попереду. Він повинен бути присутнім, лише якщо він є в декларації заголовка. Перед деструктором не розміщується тип даних. У цьому випадку для змінної kmh встановлено значення 0.

Решта методів мають бути зрозумілими, з урахуванням правил щодо функцій.

Далі ми маємо адаптувати main.cpp.

Тут важливо включити файл заголовка klasse.h. Якщо про це забуто, компілятор не може знайти клас, оголошений у файлі. При створенні екземпляра класу ми тепер маємо 2 конструктори. У цьому прикладі було викликано конструктор rennwagen (). Це просто запускає візок. З іншого боку, інший конструктор, здається, «в бігу», оскільки він запускає двигун і розганяється безпосередньо до 199 км/год. Після того, як клас був створений, ми отримали об'єкт класу гоночних автомобілів у змінній Bmw. Змінні класу (так звані властивості) і методи тепер доступні через Bmw, за яким слідує крапка (якщо змінні або методи визначені як загальнодоступні). Bmw.kmh заборонено поза класом, оскільки це було оголошено приватним.

Звичайно, можна використовувати і вказівник.

Спадщина класу

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

Наступний приклад показує, як це працює. Але спочатку потрібно створити файл заголовка з ім'ям vererbung.h та новий вихідний файл (vererbung.cpp).

Клас caprio оголошується з класом caprio. : громадський гоночний автомобіль означає, що клас caprio успадковує всі методи та змінні (властивості) від класу гоночних автомобілів. Обов’язковою умовою є, звичайно, те, що методи та змінні (властивості), які є у гоночних автомобілях та мають використовуватися у капріо, є загальнодоступними або захищеними. У самому класі caprio ми оголошуємо 2 конструктори та метод verdeck () у файлі cpp.
Цікавим є конструктор caprio (int kmh). Раніше, у класі гоночних автомобілів, ми також перевантажили звичайний конструктор гоночними автомобілями (int kmh). Тож було б перевагою, якщо перевантажений конструктор caprio (int kmh) викликати так, щоб тоді завантажувався не стандартний батьківський конструктор, а батьківський (int kmh). Щоб щось подібне було можливим, відповідний конструктор повинен бути визначений у файлі заголовка: caprio (int kmh): гоночний автомобіль (kmh)
Конструктор батьківського класу, який потрібно викликати, включаючи необхідні параметри, просто зазначається після двокрапки та перед тілом функції.

У vererbung.cpp визначено лише метод verdeck (), інакше ми маємо лише конструктори, і вони вже визначені.

Оскільки зараз у нас новий клас, нам, звичайно, доведеться змінити і код main.cpp.

Коли створюється екземпляр нового класу, батьківський конструктор гоночних автомобілів завжди виконується першим, оскільки з нього походить клас капріо. Потім викликається конструктор caprio, який у свою чергу викликає метод verdeck ().

Виклик ланцюгового методу

Ключове слово this - власний покажчик класу. Цей покажчик також можна визначити як тип повернення. Це означає, що методи можна назвати безпосередньо пов'язаними. Ось окремий приклад, який не має нічого спільного з рештою сторінки:

З класом визначення & rCall (); повертається власний об'єкт. Якщо метод повертає власний об'єкт, інший метод можна отримати безпосередньо через оператор вибору компонента (в даному випадку крапка.). Однак методи слід визначати як загальнодоступні.

З класом визначення * pCall (); власний об'єкт також повертається, але як покажчик. До іншого методу також можна отримати прямий доступ за допомогою оператора вибору компонентів (у цьому випадку тире стрілка ->). Методи також повинні бути знову відкритими. Особисто я вважаю, що варіант -> є приємнішим, тому що я розробляв PHP 10 років тому.:)