Здавалка
Главная | Обратная связь

Лабораторна робота №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 Все права принадлежат авторам размещенных материалов.