Skip to main content

Τι είναι η εικονική κληρονομιά;

Η εικονική κληρονομιά είναι ένας τύπος κληρονομιάς στον οποίο η εφαρμογή μιας υπερκλάσης είναι ελλιπής και απαιτείται μια υποκατηγορία για τον πλήρη ορισμό ενός αντικειμένου.Αυτός ο τύπος κληρονομιάς μπορεί να χρησιμοποιηθεί σε συνδυασμό τόσο με την ενιαία όσο και με την πολλαπλή κληρονομιά, αλλά χρησιμοποιείται συχνότερα σε πολλαπλές κληρονομικές.Οποιαδήποτε τάξη που κληρονομεί από μια κλάση εικονικής βάσης γίνεται άμεση υποκατηγορία αυτής της κλάσης βάσης.Μια εικονική κλάση βάσης μπορεί να βασίζεται σε μια υποκατηγορία για να εφαρμόσει όλες τις μεθόδους της, αλλά αυτό δεν είναι απαίτηση.

Η C ++ είναι η πιο γνωστή γλώσσα του υπολογιστή που χρησιμοποιεί εικονική κληρονομιά.Για να δηλώσει την εικονική κληρονομιά στην C ++, χρησιμοποιείται η εικονική λέξη -κλειδί.Τόσο η υπερκλάση όσο και η υποκατηγορία πρέπει να δηλώνουν εικονικές μεθόδους με την εικονική λέξη -κλειδί.Αυτό λέει στον μεταγλωττιστή C ++ ότι η υπερκλάση είναι ελλιπής και πρέπει να λάβει πληροφορίες από την υποκατηγορία για να την ολοκληρώσει.Χρησιμοποιώντας την υποκατηγορία για να ολοκληρώσετε την υπερκλάση δεν σημαίνει ότι οι υποκατηγορίες αντικαθιστούν ο ένας τον άλλον εάν έχουν την ίδια κατηγορία βάσης και ο μεταγλωττιστής C ++ φροντίζει να καθορίσει ποια κομμάτια πηγαίνουν με κάθε αντικείμενο.Η κληρονομιά, οι παγκόσμιες λειτουργίες στην C ++ δεν μπορούν να δηλωθούν εικονικές.Αυτός ο τύπος κληρονομιάς μπορεί να χρησιμοποιηθεί μόνο όταν ακολουθεί τις αρχές προγραμματισμού προσανατολισμένου στον αντικειμενικό προσανατολισμό (OOP).Ο λόγος για αυτό είναι ότι οι παγκόσμιες λειτουργίες δεν σχετίζονται με μια συγκεκριμένη τάξη, και έτσι είναι συνήθως αυτοτελείς μόνοι τους.Χωρίς μια υπερκλάση και η κληρονομιά της υποκατηγορίας δεν μπορεί να συμβεί, έτσι οι παγκόσμιες λειτουργίες και η εικονική κληρονομιά είναι αμοιβαία αποκλειστικά.Οι παγκόσμιες λειτουργίες μπορούν, θεωρητικά, να χρησιμοποιηθούν μέσα σε εικονικές λειτουργίες, αλλά το αντίστροφο μπορεί να μην λειτουργεί πάντα.

Η εικονική κληρονομιά χρησιμοποιείται για την επίλυση πολλών προβλημάτων προγραμματισμού και μία από τις πιο χρήσιμες είναι η επίλυση της ασάφειας.Σε πολλαπλή κληρονομιά, μπορεί κανείς να έχει μια βασική κατηγορία Α που έχει δύο υποκατηγορίες, Β και Γ, και στη συνέχεια μια κατηγορία D που κληρονομεί και από τις δύο κατηγορίες Β και Γ. Αυτό το πρότυπο ονομάζεται συνήθως το διαμάντι του θανάτου επειδή αν οι τάξεις Α, Β,και το C έχει όλες τις εφαρμογές της ίδιας μεθόδου, δεν είναι δυνατό για την κατηγορία D να καθορίσει ποια εφαρμογή θα πρέπει να χρησιμοποιήσει.Η εικονική κληρονομιά επιλύει αυτό το πρόβλημα, επειδή κάθε υλοποίηση των τάξεων παραμένει διακριτή και επομένως ξεκάθαρο.Αυτή η διάκριση αντιμετωπίζεται από εξειδικευμένα εσωτερικά αντικείμενα που ονομάζονται εικονικοί πίνακες (VTables) που παρακολουθούν κάθε τύπο αντικειμένου, αλλά αυτοί οι πίνακες δεν χρειάζεται να χειρίζονται ρητά από έναν προγραμματιστή επειδή είναι ενσωματωμένοι στη γλώσσα.