Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Поняття успадкування

Множинне успадкування

Поняття успадкування

План

Резервування й профілювання. Комутатори LAN підтримують методи резервування пропускної здатності інтерфейсів для класів трафіка або для індивідуальних потоків.

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

 

 

Питання:

1. Що таке VLAN?

2. Що таке протокол PPTP na L2PTP, приведіть приклади?

3. Призначення VLAN, PPTP.

4. Типи VLAN

2. Визначення похідного класу

3. Управління доступом до членів базового класу

 

 

Однією з найбільш потужних властивостей класів у С++ є можливість їхнього розширення шляхом успадкування.

Успадкування – це процес створення нового класу шляхом додавання нових членів до вже існуючого класу.

У термінології С++ клас, до якого додаються нові члени, т. б. клас, що успадковується, називається базовим класом. А клас, що наслідує базовий клас, називається похідним класом.

Рисунок 1 – Базовий клас

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

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

Крім того, слід пам’ятати, що успадкування не працює у зворотному напрямку. Т. б. базовому класу та його об’єктам недоступні похідні класи.

2. Визначення похідного класу

 

Опис в програмі нового класу вказує на те, що він є похідним класом від іншого класу. Для цього використовується знак двокрапки (:), за ним слідує специфікатор доступу та ім’я базового класу.

Загальний синтаксис оголошення класу, що наслідує базовий клас, має такий вигляд:

class ім’я_похідного_класу: специфікатор_доступу м’я_базового_класу

{ // тіло похідного класу };

Приклад: створюється базовий клас TwoShape, в якому зберігаються основні параметри (ширина та висота) двовимірного об’єкта, й похідний клас Triangle, створений на основіTwoShape.

#include <iostream>

#include <cstring> #include <conio.h>

using namespace std; // оголошення базового класу

class TwoShape

{

public:

double width;

double height;

void showDim()

{

cout << "Width and height amount to " << width << " and " << height << " \n ";

}

};

// оголошення похідного класу

class Triangle: public TwoShape

{

public:

char style[20];

double area()

{

return width* height/2;

}

void showStyle()

{

cout << "This triangle is" << style << " \n ";

}

};

int main()

{

Triangle t1;

Triangle t2;

//всі члени класу Triangle доступні для об'єктів класу

//Triangle, навіть ті, що наслідувані від класу TwoShape

t1.width=4.0;

t1.height =4.0;

strcpy(t1.style,"isosceles"); // рівнобедрений

t2.width=8.0;

t2.height =12.0;

strcpy(t2.style,"right"); // прямокутний

cout << "Information about triangle t1: \n ";

t1.showStyle();

t1.showDim();

cout<<"Triangle area "<<t1.area()<<" \n "<<" \n ";

cout << "Information about triangle t2: \n ";

t2.showStyle();

t2.showDim();

cout<<"Triangle area "<<t2.area()<<" \n ";

getch();

return 0;

}

В даному прикладі клас TwoShape визначає атрибути „узагальненої” двохвимірної фігури (наприклад, квадрата, прямокутника, трикутника тощо). В класі Triangle створюється специфічний тип об’єкта класу TwoShape, в даному випадку трикутник. Клас Triangle містить всі елементи класу TwoShape й, крім того, поле style, функцію area() та функціюshowStyle(). У змінній style зберігається опис типу трикутника, функція area() обчислює й повертає його площу, а функція showStyle() відображає дані про тип трикутника.

Звернімо увагу на синтаксис, що використовується в оголошенні класу Triangle, щоб зробити його похідним від класу TwoShape.

class Triangle: public TwoShape {

Оскільки клас Triangle включає всі члени базового класу TwoShape, то він може звертатися до членів width й height всередині методу area(). Крім того, всередині функції main() об’єкти t1 й t2 можуть безпосередньо посилатися на члени width й height так, немов би вони є частиною класу Triangle.

3. Управління доступом до членів базового класу

 

Статус доступу членів базового класу в похідному класі визначається специфікатором доступу, що використовується для успадкування базового класу. Специфікатор доступу базового класу виражається одним з ключових слів: private, public чи protected.

Якщо специфікатор доступу не вказаний, то за замовчуванням використовується специфікатор private.

Якщо базовий клас успадковується як public-клас, всі його public-члени стають public-членами похідного класу, а його protected-члени - protected-членами похідного класу.

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

Якщо ж базовий клас наслідується з використанням ключового слова private, його public- та protected члени стають private-членами похідного класу.

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

Розглянемо на простому прикладі як статус доступу впливає на роботу з даними базового класу.

// демонстрація public-успадкування.

#include <iostream>

#include <conio.h>

using namespace std;

// оголошення базового класу

class B

{

private:

int i, j;

public:

void set(int a, int b)

{ i=a; j=b; }

void show()

{ cout<<i<<” ”<<j<<”\n”; } };

// оголошення похідного класу

class D: public B

{

private:

int k;

public:

D(int x)

{ k=x; }

void showk()

{ cout<<k<<”\n”; }

};

int main()

{

D obj(3);

obj.i=10; // Помилка! Член i закритий в рамках класу В

obj.set(1,2); // Отримуємо доступ до членів базового класу

obj.show(); // Отримуємо доступ до членів базового класу

obj.showk(); // Використовується член похідного класу

getch();

return 0;

}

Оскільки функції set() та show() є відкритими (public) членами класу В, їх можна викликати для об’єкта obj типу D з функції main(). Але оскільки змінні i та j визначені як private-члени, вони залишаються закритими в рамках свого класу В. Клас D не може отримати доступ до закритого члену класу В. Звідси маємо помилку при зверненні до змінної i.

Протилежністю до відкритого (public) успадкування є закрите (private).

// демонстрація закритого способу успадкування.

#include <iostream>

#include <conio.h>

using namespace std;

// оголошення базового класу

class B

{

private:

int i, j;

public:

void set(int a, int b)

{

i=a;

j=b;

}

void show()

{

cout<<i<<" "<<j<<”\n”;

}

};

// оголошення похідного класу

// клас В наслідується закритим способом

class D: private B

{

private:

int k;

public:

D(int x)

{

k=x;

}

void showk()

{

cout<<k<<”\n”;

}

};

int main()

{

D obj(3); // тепер функції set() та show() недоступні для частин програми поза класом D

obj.set(1,2); // Помилка! Доступ до функції set() неможливий

obj.show(); // Помилка! Доступ до функції show() неможливий

obj.showk(); // Використовується член похідного класу

getch();

return 0;

}

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

 

<== предыдущая лекция | следующая лекция ==>
Якість обслуговування в VLAN | Поняття і особливості будівельної діяльності. Множинне успадкування
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 804; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.03 сек.