русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Конструктори і функції


Дата додавання: 2014-04-22; переглядів: 921.


Ні в базовому, ні в похідних класах немає конструкторів, тому компілятор, зустрівши вирази типу

manager m1,m2;

використовує конструктор, встановлений за замовчуванням для класу manager, що викликає конструктор класу employce. Методи getdata() і putdata() похідних класів викликають однойменні методи базових класів.

 

Загальне і приватне успадковування

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

class manage: public employce;

Що дає нам слово public в цьому твердженні і чи має воно альтернативу? Ключове слово public визначає, що об’єкт похідного класу може мати доступ до методів базового класу, оголошених як public. Альтернативою є ключове слово private. При його використанні для об’єктів похідного класу нема доступу до членів базового класу.

 

Комбінації доступу

Існує багато можливостей для доступу. Приведемо приклад, що показує, яка комбінація буде працювати, а яка – ні. Далі приведено лістінг програми 11.7

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<bios.h>

class A

{private:

int privdataA;

protected:

int protdataA;

public:

int pubdataA;

};

/////////////

class B:public A

{public:

void funcs()

{int a;

// a=privdataA; помилка

a=protdataA;

a=pubdataA;

}

};

///////////

class C:private A

{public:

void funct()

{int a;

//a=privdataA; // помилка

a=protdataA;

a=pubdataA;

}

};

///////////

int main()

{clrscr();

int a;

B objB;

// a=objB.privdataA;//помилка

// a=objB.protdataA;//помилка

a=objB.pubdataA;

 

C objC;

// a=objC.privdataA;//помилка

// a=objC.protdataA;//помилка

// a=objC.pubdataA; //помилка

bioskey(0);

return 0;

}

Програма 11.7

В програмі описаний клас А, що має дані зі специфікаторами доступу private, public, protected. Клас В і С є похідними класами. Клас В є загальним спадкоємцем, клас С – приватним спадкоємцем класу А. Методи похідних класів мають доступ до даних базового класу, оголошений як public чи protected. Для об’єктів похідних класів відсутній доступ до членів базового класу, оголошених як protected чи private.

Що нового у відмінностях між загальними і приватними похідними класами? Об’єкти загального спадкоємця В мають доступ до членів класу А, оголошених як public чи protected, а об’єкти приватного спадкоємця класу С мають доступ лише до членів, оголошених як private.

Якщо не вказувати специфікатор доступу при створенні класу, то буде використаний специфікатор private.

 


<== попередня лекція | наступна лекція ==>
Ієрархія класів | Вибір специфікаторів доступу


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн