226
Егер базалық кластардың ортақ ата-тегі бар болса,
онда осы базалық
кластардан туындайтын класс ата-тегі өрістерінің екі данасын (экземплярын)
мұралайды, бұлай болғаны жақсы емес. Мұндай жағдайдың алдын алу үшін
ортақ ата-тегінен мұралау кезінде оны виртуалды класс ретінде анықтау керек:
class monstr{
...
};
class daemon: virtual public monstr{
...
};
class lady: virtual public monstr{
...
};
class baby: public daemon, public lady{
...
};
baby
класында
monstr
класы өрістерінің бір ғана данасы (экземпля-
ры) болады. Егер базалық класс виртуалды түрде де, қарапайым түрде де
мұраланатын болса, онда туынды класта əрбір виртуалды емес нұсқа үшін
жеке даналар жəне виртуалды нұсқа үшін тағы бір дана кездеседі.
Көптік мұралау туынды класты екі немесе одан
көп базалық кластардың
қасиеттерімен қамтамасыз ету үшін қолданылады. Көбінесе осы кластардың
біреуі
негізгі болып табылады, ал қалғандары кейбір қосымша қасиеттермен
қамтамасыз етеді,
сондықтан олар араластыру кластары деп аталады.
Араластыру кластары мүмкіндігінше виртуалды болуы тиіс жəне параметрсіз
конструкторлар
көмегімен құрылуы керек, сонда ромб түріндегі мұралау
(базалық кластардың ортақ ата-тегі болатын жағдай)
кезінде туындайтын
көптеген қиындықтарды жеңуге мүмкіндік береді.
Достарыңызбен бөлісу: