Лабораторна робота №3. Успадкування і віртуальні функції
Мета. Одержати практичні навички створення ієрархії класів і використання статичних компонентів класу. Основний зміст роботи. Написати програму, в якій створюється ієрархія класів. Включити поліморфні об'єкти в зв'язаний список, використовуючи статичні компоненти класу. Показати використання віртуальних функцій. Короткі теоретичні відомості Статичні члени класу Такі компоненти повинні бути визначені в класі як статичні (static). Статичні дані класів не дублюються при створенні об'єктів, тобто кожен статичний компонент існує в єдиному екземплярі. Доступ до статичного компонента можливий тільки після його ініціалізації. Для ініціалізації використовується конструкція тип ім'я_класу : : ім'я_даного ініціалізатор; Наприклад, int complex : : count = 0; Ця визначення повинно бути розміщене в глобальній області після визначення класу. Тільки при ініціалізації статичне дане класу одержує пам'ять і стає доступним. Звертатися до статичного даного класу можна звичайним способом через ім'я об'єкта ім'я_об'єкта.ім'я_компонента Але до статичних компонентів можна звертатися і тоді, коли об'єкт класу ще не існує. Доступ до статичних компонентів можливий не тільки через ім'я об'єкта, але і через ім'я класу ім'я_класу : : ім'я_компонента Однак так можна звертатися тільки до public компонентів. Для звертання до private статичного компонента ззовні можна за допомогою статичних компонентів-функцій. Ці функції можна викликати через ім'я класу. ім'я_класу : : ім'я_статичної_функції Приклад. #include <iostream.h> class TPoint { double x,y; static int N; // статичний компонент- дане : кількість крапок public: TPoint(double x1 = 0.0,double y1 = 0.0){N++; x = x1; y = y1;} static int& count(){return N;} // статичний компонент-функція }; int TPoint : : N = 0; //ініціалізація статичного компонент-даного void main(void) {TPoint A(1.0,2.0); TPoint B(4.0,5.0); TPoint C(7.0,8.0); cout<<“\nВизначені ”<<TPoint : : count()<<“крапки.”; } Покажчик this Коли функція-член класу викликається для обробки даних конкретного об'єкта, для цієї функції автоматично і неявно передається покажчик на той об'єкт, для якого функція викликана. Цей покажчик має ім'я this і неявно визначене в кожній функції класу в такий спосіб ім'я_класу *const this = адреса_об'єкта Покажчик this є додатковим схованим параметром кожної нестатичної компонентної функції. При вході в тіло приналежної класу функції this ініціюється значенням адреси того об'єкта, для якого викликана функція. В результаті цей об'єкт стає доступним всередині цієї функції. В більшості випадків використання this є неявним. Зокрема, кожне звертання до нестатичного функції-члену класу неявно використовує this для доступу до члена відповідного об'єкта. Прикладом широко розповсюдженого явного використання this є операції зі зв'язаними списками. Успадкування Успадкування — це механізм одержання нового класу на основі вже існуючого. Існуючий клас може бути доповнений чи змінений для створення нового класу. Існуючі класи називаються базовими, а нові – похідними. Похідний клас успадковує опис базового класу; потім він може бути змінений додаванням нових членів, зміною існуючих функцій-членів і зміною прав доступу. За допомогою спадкування може бути створена ієрархія класів, що спільно використовують код і інтерфейси. Наслідувані компоненти не переміщаються в похідний клас, а залишаються в базових класах. В ієрархії похідний об'єкт успадковує дозволені для спадкування компонента всіх базових об'єктів (public, protected). Допускається множинне спадкування – можливість для деякого класу успадковувати компоненти декількох ніяк не зв'язаних між собою базових класів. В ієрархії класів угода щодо приступності компонентів класу наступні: private – Член класу може використовуватися тільки функціями-членами даного класу і функціями-“друзями” свого класу. У похідному класі він недоступний. protected – Те ж, що і private, але додатково член класу з даним атрибутом доступу може використовуватися функціями-членами і функціями-“друзями” класів, похідних від даного. public – Член класу може використовуватися будь-якою функцією, яка є членом даного чи похідного класу, а також до public - членів можливий доступ ззовні через ім'я об'єкта. Варто мати на увазі, що оголошення friend не є атрибутом доступу і не успадковується. Синтаксис визначення похідного класу : ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|