Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Наследование или производные классы
Производные классы, дают простой, гибкий и эффективный механизм определения нового класса посредством добавления возможностей уже существующего класса без перепрограммирования и перекомпиляции
Определение нового класса без наследования
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 доступен функциям членам только этого класса, наследникам недоступен. Виден только дружественным функциям …
|