Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Наследование или производные классы






Производные классы, дают простой, гибкий и эффективный механизм определения нового класса посредством добавления возможностей уже существующего класса без перепрограммирования и перекомпиляции

 

Определение нового класса без наследования

 

Struct employee {

Char *name, *age, *deportment;

Int salary;

Employee *next; }

 

Struct manager {

Employee emp; // описывает информацию о нем, как о работнике

Employee *group; // указатель на цепочку подчиненных

}

Чтобы обработать такие разнородные структуры, необходимо писать специальный код и помнить о том, что они как то связаны через специальное поле emp

Самое главное!!!! 11! компилятор не видит никакой связи между этими двумя типами. Нельзя использовать один объект вместо другого

Указатель на менедженра *manager не является *employee и в общую цепочку по работникам, менеджера так просто не поставишь.

 

//

Такая запись гарантирует, что все данные из employee присутствуют в структуре manager

Эти классы связаны наследованием. Предок employee, а наследователь manager

Самое главное, компилятор знает про связи класса с унаследованными классами

Main()

{

Manager m1, m2;

Employee e1, e2;

 

Employee * elist;

Elist=& m1;

M1.next=e1;

E1.next=& m2;

m2.next=& e2;

e2.next=0;

 

Везде, где ожидается тип employee *, можно смело подставлять manager *

 

Функции при наследовании

Обычные структуры при наследовании не так полезны, чаще всего наследуют не только данные, но и функции по обработке этих данных.

 

class employee {

Char *name, *age, *deportment;

Int salary;

Public:

Employee *next; }

 

class manager {

Employee emp; // описывает информацию о нем, как о работнике

Employee *group; // указатель на цепочку подчиненных

}

 

….

 

Внутри функции managerprint

1 часть: производился бы вывод всей информации о менджере, как о работнике

2 часть: специфичная информация о менеджере, список подчиненных

С учетом того, что у самого класса employee есть функция print, которая выводит информацию о работнике, функция managerprint может быть следующей

 

Управление видимостью при наследовании

При наследовании в структурах, наследование открытое по умолчанию. В классах, по умолчанию – закрытое. Однако имеется возможность управлять доступом.

Табличка…

 

Ячейка 1. Элемент класса может быть доступен всем

Ячейка 1.2, 2.1, 2.2 Элемент может быть доступен любым функциям класса/дружественным функциям и виден наследникам

Ячейка 1.3, 2.3, 3.1, 3.2, 3.3 доступен функциям членам только этого класса, наследникам недоступен. Виден только дружественным функциям






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.