Sobes.tech
Middle+

Kas yra virtualus paveldėjimas?

sobes.tech AI

Atsakymas iš AI

Viritualus paveldėjimas yra viena iš paveldėjimo formų C++, leidžianti išvengti "diamanto problemos" (diamond problem), kai tas pats pagrindinis klasė paveldima netiesiogiai keliais keliais. Su virtualiu paveldėjimu, bendra pagrindinė klasė egzistuos tik vieną kartą galutiniame klasės objekte.

Privalumai:

  • Vengia duplikatų duomenų ir funkcijų iš bendros pagrindinės klasės.
  • Užtikrina vieną šaltinį, prie kurio galima prieiti norint pasiekti virtualios pagrindinės klasės narius.

Trūkumai:

  • Sunkina objektų konstravimą ir prieigą prie virtualių pagrindinių klasių (per "netiesioginius" rodyklius ar perkėlimus).
  • Šiek tiek sumažina našumą prieinant prie virtualios pagrindinės klasės narių dėl poreikio spręsti perkėlimus vykdymo metu.
  • Kai kuriose situacijose (pavyzdžiui, statinės inicializacijos metu) yra apribojimų naudojant virtualias pagrindines klases.

Taikoma deklaruojant pagrindinę klasę naudojant raktinį žodį virtual.

class Base {
public:
    int data;
};

class Derived1 : virtual public Base { // Virtualus paveldėjimas
};

class Derived2 : virtual public Base { // Virtualus paveldėjimas
};

class Final : public Derived1, public Derived2 { // Diamanto formos paveldėjimas
};

// Objektas klasės Final turės tik vieną Base::data egzempliorių