Sobes.tech
Middle+

Kas ir virtuālā mantošana?

sobes.tech AI

Atbilde no AI

Virtuālā mantošana ir viena no C++ mantošanas formām, kas ļauj izvairīties no "dimanta problēmas" (diamond problem), kad tas pats pamatklases tiek mantots netieši vairākos ceļos. Ar virtuālo mantošanu kopīgā pamatklase pastāvēs tikai vienu reizi galīgās klases objektā.

Priekšrocības:

  • Novērš datu un funkciju dublēšanos no kopīgās pamatklases.
  • Nodrošina vienotu avotu piekļuvei virtuālās pamatklases locekļiem.

Trūkumi:

  • Sarežģī objekta būvniecību un piekļuvi virtuālajām pamatklasēm (caur "netiešiem" rādītājiem vai pārvietojumiem).
  • Nedaudz samazina veiktspēju piekļūstot virtuālās pamatklases locekļiem, jo ir jāatrisina pārvietojumi izpildes laikā.
  • Dažos kontekstos (piemēram, statiskās inicializācijas laikā) ir ierobežojumi virtuālo pamatklasēm.

Tiek piemērots, deklarējot pamatklasi ar vārdu virtual.

class Base {
public:
    int data;
};

class Derived1 : virtual public Base { // Virtuāla mantošana
};

class Derived2 : virtual public Base { // Virtuāla mantošana
};

class Final : public Derived1, public Derived2 { // Dimanta formas mantošana
};

// Objekta klasei Final būs tikai viens Base::data instances