p align="justify"> 2) Створити ієрархії успадкування: людина - студент, співробітник - практикант.
В
# include
# include namespace std; chel
{: pol [20]; (char * pol) {(this-> pol, pol);
} set_pol (char * pol)
{strcpy (this-> pol, pol);} show_pol (void) {<<В«pol__ = __>В« <
};
}; student: public chel
{: stip; imya [20]; (char * imya, double stip, char * pol): chel (pol)
{(this-> pol, pol); (this-> imya, imya);> stip = stip;
} set_iz1 ()
{> stip = stip; (this-> pol, pol); (this-> imya, imya);
} show_01 (void)
{<<В«stip__ = __>В« <};
}; worck: public chel {: zarp; stag [20]; (char * stag, double zarp, char * pol): chel (pol)
{(this-> pol, pol); (this-> stag, stag);> zarp = zarp;
} set_z2 ()
{> zarp = zarp; (this-> pol, pol); (this-> stag, stag);
} show_02 (void)
{<<В«zarp__ = __>В« <};
}; pract: public worck {: ozen; srok [20]; (double ozen, char * srok, char * stag, double zarp, char * pol): worck (stag, zarp, pol )
{strcpy (this-> pol, pol); (this-> stag, stag);> zarp = zarp;> ozen = ozen; (this-> srok, srok );
} set_ss () {this-> ozen = ozen; (this-> srok, srok); (this-> stag, stag);> zarp = zarp; (this- > pol, pol);} show_ss3 (void)
{<<В«ozenka____ = ___>В« <};
}; main (void)
{stip; <<В«stipВ» <> stip; zarp; <<В«zarplataВ» <> zarp ; pol [20]; <<В«polВ» <> pol; imya [20]; <<В«vvedite imyaВ» <> imya; stag [20]; <<В«vvediter stagВ» <> stag; ozen; <<В«vvedit ozenkuВ» <> ozen; srok [20 ]; <<В«vvedite srokВ» <> srok; a (pol); <<"________________chelВ» <
}
Контрольне питання
) При множині спадкування похідний клас отримує атрибути двох або більше класів.
При використанні множинного спадкоємства для породження класу конструктор похідного класу повинен викликати конструктори всіх базових класів.
При породженні класу з похідного класу ви створюєте ієрархію спадкування (ієрархію класів).
2)
) семантична невизначеність часто сукупно представляється як Проблема ромба
відсутня можливість явного багаторазового успадкування від одного класу
порядок спадкування змінює семантику класу
Перекриття імен функцій - ця проблема є як і в звичайному спадкуванні, так і в множині.
Перекриття віртуальних функцій
Представлення об'єкта в пам'яті
) Віртуа ? льное Насл ? дование (англ. virtual inheritance) в мові програмування C + + - один з варіантів успадкування, який потрібен для вирішення деяких проблем, що породжуються наявністю можливості множинного спадкування (особливо В«ромбоподібного спадкуванняВ»), шляхом вирішення неоднозначності того, методи якого з суперкласів (безпосередніх класів-предків) необхідно використовувати. Воно застосовується в тих випадках, коли множинне успадкування замість передбачуваної повної композиції властивостей класів-предків призводить до обмеження доступних успадкованих властивостей внаслідок неоднозначності. Базовий клас, наслідуваний множинно, визначається віртуальним за допомогою ключового слова virtual.
) Віртуальне спадкування не є явною характеристикою самого базового класу, а лише описує його ставлення до похідного. Як ми вже відзначали, віртуальне успадкування - це різновид композиції за посиланням. Інакше кажучи, доступ до подоб'екти і його нестатичних членам непрямий, що забезпечує гнучкість, необхідну для об'єднання декількох віртуально успадкованих подоб'ектов базових класів в один розділяється примірник всередині похідного. У той же час об'єктом похідного класу можна маніпулювати через вказівник або посилання на тип базово...