Skip to main content

Τι είναι μια εικονική λειτουργία;

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

Η εικονική λειτουργία μπορεί να οριστεί με έναν από τους δύο τρόπους.Πρώτον, μπορεί να οριστεί ως ένα στέλεχος, στο οποίο έχει ένα άδειο σώμα και δεν κάνει τίποτα.Δεύτερον, θα μπορούσε να οριστεί ως μια καθαρή εικονική λειτουργία, όπου ορίζεται ως μηδενική στο αρχείο κεφαλίδας superclasss.

Υπάρχουν πλεονεκτήματα και μειονεκτήματα και στις δύο μεθοδολογίες.Ο καθορισμός μιας συνάρτησης ως στέλεχος εξασφαλίζει ότι όλες οι υποκατηγορίες έχουν κάποια εφαρμογή του, ακόμα και αν δεν κάνει τίποτα.Εάν κάποιος ξεχάσει να παρακάμψει τη λειτουργία και να την εφαρμόσει σωστά σε μια υποκατηγορία, ωστόσο, δεν θα φαίνεται να το επισημαίνουν σφάλματα ή προειδοποιήσεις.Ο καθορισμός μιας καθαρής εικονικής λειτουργίας, από την άλλη πλευρά, απαιτεί από κάθε υποκατηγορία να έχει τον δικό της ορισμό της λειτουργίας και τα σφάλματα θα εμφανιστούν εάν αυτό δεν συμβαίνει.Εικονικές λειτουργίες, έτσι οι ιεραρχίες κληρονομιάς με περισσότερα από δύο επίπεδα μπορεί να μην απαιτούν ρητές ορισμούς των εικονικών λειτουργιών.Για παράδειγμα, μπορεί κανείς να θεωρήσει μια κατηγορία Α που δηλώνει μια εικονική λειτουργία, η οποία εφαρμόζεται στην υποκατηγορία Β. Η τάξη Β έχει υποκατηγορία της δικής της, η κατηγορία Γ. Η κατηγορία C δεν απαιτεί ρητό ορισμό της τάξης ως λειτουργία, επειδή κληρονομείΟ ορισμός από την κλάση Β. Εάν είναι απαραίτητο, η κατηγορία C θα μπορούσε να υπερισχύσει της λειτουργίας της κατηγορίας BS ή θα μπορούσε να αντικαταστήσει τη λειτουργία της κατηγορίας BS ενώ παράλληλα θα την αποκαλεί.

Στο άλλο άκρο, οι εικονικές λειτουργίες δεν πρέπει να ορίζονται σε μια υποκατηγορία εάν δηλώνονται εικονικές σε αυτήν την υποκατηγορία.Για παράδειγμα, μπορεί κανείς να εξετάσει μια κατηγορία Α που δηλώνει μια εικονική λειτουργία και έχει δύο υποκατηγορίες, Β και Γ. Επιπλέον, θα μπορούσε κανείς να φανταστεί ότι η κατηγορία Β έχει υποκατηγορίες D και E, και η υποκατηγορία C έχει υποκατηγορίες F και G.

Β μέσω G Όλοι πρέπει να έχουν τάξη ως εικονική λειτουργία που ορίζεται με κάποιο τρόπο.Εάν η κατηγορία Β έχει μια εφαρμογή της AS, οι κλάσεις D και E δεν χρειάζεται να επανατοποθετηθούν.Ίσως οι υποκατηγορίες CS πρέπει να εφαρμόσουν ως λειτουργία, αλλά και οι δύο κάνουν κάτι διαφορετικό, οπότε ο καθορισμός της λειτουργίας στην ίδια την κατηγορία C δεν θα ήταν χρήσιμη.Σε αυτή την περίπτωση, η λειτουργία μπορεί να δηλωθεί εικονική στην κατηγορία C και μια εφαρμογή δεν είναι απαραίτητη.

Οι εικονικές λειτουργίες μπορεί να είναι τρομακτικές για μάθηση, αλλά όταν χρησιμοποιούνται σωστά, μπορούν να μειώσουν την αλληλεπικάλυψη κώδικα και να κάνουν τον κώδικα πολύ πιο εύκολο να κατανοηθεί γενικά.Υπάρχουν όμως πολλές παγίδες με εικονικές λειτουργίες, ιδιαίτερα σχετικά με την πολλαπλή κληρονομιά.Σε πολλαπλή κληρονομιά, είναι δυνατόν για διφορούμενα καθορισμένες εικονικές λειτουργίες να έρχονται σε σύγκρουση μεταξύ τους, οπότε θα πρέπει να χρησιμοποιούνται με προσοχή στο πλαίσιο αυτό.