Sobes.tech
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-ի