Middle+
Ի՞նչ է վիրտուալ ժառանգությունը։
sobes.tech AI
Պատասխան AI-ից
Վիրտուալ ժառանգությունը C++-ում ժառանգության մի ձև է, որը թույլ է տալիս խուսափել "դիամանտային խնդիր" (diamond problem), երբ նույն հիմնական դասը ժառանգվում է անուղղակիորեն մի քանի ճանապարհով: Վիրտուալ ժառանգության դեպքում ընդհանուր հիմնական դասը կլինի միայն մեկ օրինակ վերջնական դասի օբյեկտում:
Առավելություններ՝
- Խուսափում է ընդհանուր հիմնական դասից տվյալների և ֆունկցիաների կրկնությունից:
- ապահովում է միակ աղբյուրը՝ մուտք գործելու վիրտուալ հիմնական դասի անդամներին:
Կողմնային՝
- Կրկնվում է օբյեկտների կառուցումը և մուտքը վիրտուալ հիմնական դասեր (առանց "ուղղակի" ցուցիչների կամ տեղափոխումների):
- Փոքր-ինչ նվազում է կատարողականը՝ վիրտուալ հիմնական դասի անդամներին մուտք գործելիս՝ ժամանակի ընթացքում լուծելու անհրաժեշտության պատճառով:
- Կան որոշ սահմանափակումներ՝ որոշ կոնտեքստներում (օրինակ՝ ստատիկ ինիցիալիզացիայի ժամանակ):
Կիրառվում է՝ հայտարարելով հիմնական դասը՝ օգտագործելով virtual բանալի բառը:
class Base {
public:
int data;
};
class Derived1 : virtual public Base { // Վիրտուալ ժառանգություն
};
class Derived2 : virtual public Base { // Վիրտուալ ժառանգություն
};
class Final : public Derived1, public Derived2 { // Դիամանտային ժառանգություն
};
// Final դասի օբյեկտում կլինի միայն մեկ օրինակ Base::data-ի