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 języka programowania komputerowego, do którego wspomniano, „wirtualne” słowo kluczowe, podobne słowo kluczowe lub składnia i semantyka klasy są używane do sugerowania, że ​​dana klasa ma być uważana za wirtualną.

Nie wszystkie obiektowe języki programowania pozwalają na wiele dziedzictwa, co jest wtedy, gdy klasa dziecięca może być wyprowadzona z wielu klas rodziców w tym samym czasie. 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 parDane i funkcje ENT. Inne języki, które obsługują wielokrotne dziedzictwo, 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ć instancję klasy, na przykład klasę wnuka wykonaną z dwóch klas rodziców ze wspólnym dziadkiem, dwie kopie dziadka są wykonane w pamięci, po jednym dla każdego rodzica.

Ze względu na dwuznaczność spowodowaną wieloma kopiami 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 zaradzić tej sytuacji, w C ++ dziadek jest przekształcony w cnotklasa ual podczas deklarowania 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 strukturyzacji hierarchii klas, zwłaszcza gdy zostaną one włączone lub stają się bazą dla znacznie większych hierarchii w przyszłości. 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.

INNE JĘZYKI