Барои кадом мақсадҳо меросгирии виртуалӣ дар C++ истифода мешавад?
sobes.tech AI
Ҷавоб аз AI
C++-да виртуал мұрагерлік негізінен «алмас» мұрагерлік мәселесін шешу үшін пайдаланылады, онда негізгі сынып бірнеше аралық сыныптар арқылы бірнеше рет мұраға алынады.
Виртуал мұрагерлік болмаса, мұндай жағдайда соңғы сыныптың объектісі бірнеше негізгі сыныптың қосалқы объектілерін қамтиды, бұл негізгі сыныптың мүшелеріне қол жеткізуде айқынсыздықтар мен қателерге әкеледі.
Виртуал мұрагерлікпен, мұрагерлік иерархиясында негізгі сынып қанша рет пайда болса да, соңғы объектіде тек бір негізгі сыныптың қосалқы объектісі болады.
Мысал:
class Animal { // Негізгі сынып
public:
void eat() { /* ... */ }
};
class Mammal : public Animal { // Орта сынып 1
public:
void walk() { /* ... */ }
};
class Bird : public Animal { // Орта сынып 2
public:
void fly() { /* ... */ }
};
// Ұйығыш сынып Mammal және Bird-тан мұраға алады.
// Виртуал мұрагерлік болмаса, Animal екі рет қосылады.
// class Bat : public Mammal, public Bird { /* ... */ };
// Виртуал мұрагерлікпен, Animal бір рет қосылады.
class Bat : public virtual Mammal, public virtual Bird {
public:
// Eat()-ке қол жеткізуде айқынсыздық болмайды
};
Негізгі мақсаттар:
- "Алмас" мұрагерлік мәселесін шешу: Бірдей негізгі сыныптың бірнеше рет қосылуын болдырмау.
- Бір ғана негізгі сыныптың көшірмесін қамтамасыз ету: Объектте виртуал мұрагерлік арқылы мұраға алынған негізгі сыныптың тек бір қосалқы объектісі болуын кепілдендіру.
- Айқынсыздықтарды болдырмау: Туынды сынып арқылы виртуал мұрагерлікпен мұраға алынған негізгі сынып мүшелеріне қол жеткізуде айқынсыздықтарды жою.
Виртуал мұрагерлік кейбір өнімділік шығындарын арттыра алады және объектілердің құрылымын күрделендіруі мүмкін, сондықтан оның қолданылуы мұқият ойлануы және негізделуі керек.