Skip to main content

Co to jest klasa wirtualna?

Klasa wirtualna to klasa, która jest przydzielana tylko raz w pamięci, tak że dzieci z tej klasy używają tylko jednej kopii tej klasy nadrzędnej, która jest ustalona w pamięci.Klasa to grupa obiektów, które dzielą wspólne cechy lub atrybuty.Tworzenie klas wirtualnych daje obiektowe języki programowania możliwość stosowania wielu dziedziczeń, gdy klasy nadrzędne drugiej lub więcej generacji pochodzą ze wspólnych klas bazowych rodowych.W zależności od odwołanego języka programowania komputerowego, wirtualne słowo kluczowe, podobne słowo kluczowe lub składnia i semantyka klasy są używane do sugerowania, że konkretna klasa ma być uważana za wirtualną.

Nie wszystkie obiektyJest wtedy, gdy klasa dziecięca może być wyprowadzona z wielu klas nadrzędnych jednocześnie.W języku programowania, takim jak C ++, klasa może odziedziczyć wszystkie dane członka i funkcje członka z obu klas nadrzędnych jednocześnie i mieć dostęp do obu zestawów danych i funkcji nadrzędnych.Inne języki, które wspierają wielokrotne dziedziczenie, obejmują Perl, Python, TCL i Eiffel.

Problem występuje w wielu hierarchiach dziedzictwa, gdy dwie lub więcej klas rodziców używanych do tworzenia klasy dzieci pochodzą tylko z jednej lub tej samej klasy dziadka.Nazywa się to problemem diamentowym, nazwa wynikająca z tego, jak wyglądałaby hierarchia w tej sytuacji.Kiedy program kompilatora próbuje utworzyć klasę, taką jak klasa wnuka wykonana z dwóch klas rodziców ze wspólnym dziadkiem, wykonane są dwie kopie dziadka, po jednym dla każdego rodzica.

Ze względu na dwuznaczność spowodowaną przez wiele kopii tego samego dziadka w pamięci kompilator nie jest w stanie ustalić, który kopia dziadka powinna użyć w celu uzyskania dostępu do danych lub funkcji dziadka.Aby naprawić tę sytuację, w C ++ dziadek jest przekształcany w klasę wirtualną przy ogłoszeniu rodziców.To powoduje, że kompilator tworzy tylko jedną kopię dziadka na pamięć, którą oboje rodzice dzielą.Gdy dziadek stanie się klasą wirtualną, kompilator nie ma problemu z podjęciem decyzji, w jaki sposób wnuk powinien uzyskać dostęp do dziadka, ponieważ jest tylko jedna kopia dziadka.

Należy zachować wielką ostrożność podczas strukturyw przyszłości lub stać się bazą znacznie większych hierarchii.Właściwe wykorzystanie klasy wirtualnej daje hierarchie klasowi większą szerokość szerokości rozwoju;Mają jednak potencjał powodujący trudne do zlokalizowania błędy.Badanie zasad inżynierii programowania komputerowego pomoże zapewnić, że nie wystąpi nieoczekiwane skutki uboczne z niewłaściwej organizacji programowej.