Всего на сайте:
236 тыс. 713 статей

Главная | Механика

Void f(void). {x=3;//... y=4;}; У тілі функції f маємо прямий доступ до змінних x ..  Просмотрен 284

{x=3;//...

y=4;};

У тілі функції f маємо прямий доступ до змінних x та y, але, оскільки Base є закритим базовим класом, то статус цих змінних змінився на private. Нехай визначено ще один клас:

class Tdec:public Tderived {

public:

void g(void){}//...}

Тут уже функція g() не має доступу до змінних x та y.

Якщо ми хочемо отримати доступ до деяких закритих полів, то можна робити це через функції, описані у відкритому розділі. Аналогічно можемо діяти при визначенні похідних класів. Якщо в класі Base визначені відкриті функції для доступу до закритих полів, то вони успадковуються похідними класами й можуть використовуватися відкритими функціями похідних класів для доступу до відповідних полів (адже в протоколі похідного класу є доступ до відкритої частини будь-якого базового. Зазначимо, що в такій схемі неважливий специфікатор доступу при утворенні похідного класу.)

І ще одна обставина. Припустимо, що, оголошуючи клас B private-похідним від А, ми хочемо залишити відкритими окремі члени класу А. У такому випадку можна використати операцію розширення області видимості:

Class A

{

public:

Int i;

}

class B: private A

{//...

public:

A::i;};

Тоді змінна i матиме відкритий статус у класі В (ніби вона визначена у відкритому розділі класу В).

7.9.3. Конструктори та деструктори в похідних класах

 

Як уже зазначалося, похідний клас зазвичай містить конструктор, якщо він визначений i в базовому. Конструктор у похідному класі потрібен принаймні для того, щоб викликати конструктор базового з відповідним параметром. Синтаксично допускається відсутність конструктора в похідному класі, якщо конструктор базового не має параметрів (void-конструктор).

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

Розглянемо базовий клас, оголошений таким чином:

Предыдущая статья:PrivatePohid bPub; Следующая статья:Class Base. {private: char*basep; public: Base(const char*s){basep=strdup(s);} ..
page speed (0.1113 sec, direct)