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ų