Διαφορά ανάμεσα στην εικονική και την καθαρή εικονική λειτουργία

Συγγραφέας: Laura McKinney
Ημερομηνία Δημιουργίας: 2 Απρίλιος 2021
Ημερομηνία Ενημέρωσης: 8 Ενδέχεται 2024
Anonim
Έξυπνος διακόπτης WiFi στο έξυπνο σπίτι DIN rail EWelink 63 αμπέρ
Βίντεο: Έξυπνος διακόπτης WiFi στο έξυπνο σπίτι DIN rail EWelink 63 αμπέρ

Περιεχόμενο


Η εικονική λειτουργία και η καθαρή εικονική λειτουργία είναι και οι δύο έννοιες του πολυμορφισμού χρόνου εκτέλεσης. Η κύρια διαφορά μεταξύ του "εικονική λειτουργία ' και 'Καθαρή εικονική λειτουργία' είναι ότι η «εικονική συνάρτηση» έχει τον ορισμό της στην κλάση βάσης και επίσης οι κλάσεις που προκύπτουν από την κληρονομιά επαναπροσδιορίζονται. Η καθαρή εικονική συνάρτηση δεν έχει ορισμό στην κλάση βάσης και όλες οι κληρονομικές κλάσεις πρέπει να επαναπροσδιοριστούν.

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

Ο πολυμορφισμός υποστηρίζεται από τις γλώσσες C ++ και Java. Στην Java, χρησιμοποιείται ο όρος "overriding" αντί για "εικονική λειτουργία", καθώς η εικονική συνάρτηση είναι ο όρος C ++.

  1. Συγκριτικό διάγραμμα
  2. Ορισμός
  3. Βασικές διαφορές
  4. συμπέρασμα

Συγκριτικό διάγραμμα

Βάση σύγκρισηςΕικονική λειτουργίαΚαθαρή εικονική λειτουργία
ΒασικόςΗ εικονική λειτουργία έχει τον ορισμό της στη βασική κατηγορία.Η Καθαρή Εικονική Λειτουργία δεν έχει ορισμό στην κλάση βάσης.
Δήλωσηεικονική όνομα_χρήστη (parameter_list) {. . . . .};εικονικό όνομα_χρήστη (parameter_list) = 0;
Παράγωγη κλάσηΌλες οι παράγωγες κλάσεις μπορούν ή όχι να παρακάμπτουν την εικονική λειτουργία της βασικής κλάσης.Όλες οι παράγωγες κλάσεις πρέπει να παρακάμπτουν την εικονική λειτουργία της κλάσης βάσης.
Αποτέλεσμα

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


Ορισμός της εικονικής λειτουργίας

ο εικονική λειτουργία είναι η συνάρτηση μέλους της βασικής κλάσης και επαναπροσδιορίζεται από τις παράγωγες κλάσεις που κληρονομούν την βασική τάξη. Δεν είναι απαραίτητο όλες οι παράγωγες κλάσεις κληρονομιών να επαναπροσδιορίσουν την εικονική συνάρτηση, αλλά επαναπροσδιορίζονται μόνο από εκείνες τις παράγωγες κλάσεις που μπορεί να απαιτούν τη λειτουργία της. Μια εικονική συνάρτηση δημιουργείται από τη δήλωση της συνάρτησης στη βασική κλάση που προηγείται με τη λέξη-κλειδί 'εικονικός'.

Δήλωση:

class class {public: εικονικός τύπος funt_name (λίστα παραμέτρων) {. . . }}.

Οι κληρονομικές κλάσεις μπορούν να επαναπροσδιορίσουν την εικονική λειτουργία χωρίς καμία «εικονική» λέξη-κλειδί. Οι παράγωγες κλάσεις επαναπροσδιορίζουν την εικονική λειτουργία για να ολοκληρώσουν την εργασία της. Καθώς η εικονική συνάρτηση επαναπροσδιορίζεται στις παράγωγες κλάσεις, έχουμε πολλαπλές μορφές της ίδιας συνάρτησης. Τώρα, ποια έκδοση της συνάρτησης καλείται, εξαρτάται από το είδος του αντικειμένου που αναφέρεται για την επίκληση αυτής της λειτουργίας.


Πολυεπίπεδη κληρονομιά

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

Οι εικονικές λειτουργίες είναι επίσης ιεραρχικές, δηλαδή εάν μια παράγωγη κλάση δεν παρακάμπτει / επαναπροσδιορίζει την εικονική συνάρτηση που κληρονομείται από την κλάση βάσης και όταν το αντικείμενο παράγωγου κλάδου επικαλείται αυτή την εικονική συνάρτηση, τότε ενεργοποιείται η εικονική συνάρτηση που ορίζεται από την κλάση βάσης.

Ορισμός της καθαρής εικονικής λειτουργίας

Όπως φαίνεται παραπάνω εάν η παράγωγη κλάση δεν παρακάμπτει την εικονική συνάρτηση τότε χρησιμοποιείται η εικονική συνάρτηση που ορίζεται από την βασική κλάση. Αλλά τι γίνεται αν η ίδια η βασική κλάση δεν καθορίζει την εικονική λειτουργία. Πολλές φορές, η βασική κλάση δεν έχει ορισμό για την εικονική συνάρτηση ή μερικές φορές θέλετε όλες οι παράγωγες κλάσεις να παρακάμπτουν την εικονική λειτουργία.

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

εικονικός τύπος funct_name (parameter_list) = 0;

Κάθε φορά που μια εικονική συνάρτηση στη βασική κλάση γίνεται "καθαρή", τότε κάθε παράγωγη κλάση πρέπει υποχρεωτικά να παρακάμπτει την καθαρή εικονική λειτουργία της κλάσης βάσης. Εάν η παραγόμενη κλάση αποτύχει να παρακάμψει την καθαρή εικονική συνάρτηση της κλάσης βάσης, θα οδηγήσει σε σφάλμα σύνταξης.

Αφηρημένη τάξη

Η τάξη που περιέχει τουλάχιστον μία καθαρή συνάρτηση ονομάζεται «αφηρημένη τάξη». Δεν μπορούν να δημιουργηθούν αντικείμενα αφηρημένων τάξεων, αλλά μπορείτε να δημιουργήσετε αναφορές και δείκτες σε αφηρημένα μαθήματα. Τα μέλη των αφηρημένων τάξεων μπορούν να προσεγγιστούν μέσω του αντικειμένου των παράγωγων τάξεων που κληρονομούν την αφηρημένη κλάση βάσης.

Μια τάξη που θέλετε να δηλώσετε αφηρημένη, χρησιμοποιήστε τη λέξη-κλειδί 'αφηρημένη' μπροστά από το 'τάξη' λέξη-κλειδί.

// για παράδειγμα αφηρημένη τάξη class-name {. . εικονικός τύπος funct_name (parameter_list) = 0; . . },

  1. Οι εικονικές λειτουργίες καθορίζονται σίγουρα στην κλάση βάσης και επαναπροσδιορίζονται (παράκαμψη) στην παράγωγη κλάση. Από την άλλη πλευρά, καθαρή εικονική λειτουργία, η βασική κατηγορία δεν ορίζεται ιδιαίτερα στην κατηγορία βάσης
  2. Παράγωγη τάξη, εάν απαιτείται, επαναπροσδιορίζει την εικονική συνάρτηση, ενώ στην περίπτωση της καθαρής κλάσης που προέρχεται από εικονική συνάρτηση πρέπει οπωσδήποτε να επαναπροσδιορίσει την καθαρή εικονική συνάρτηση.
  3. Εάν η παράγωγη κλάση αποτύχει να επαναπροσδιορίσει (παρακάμψει) την εικονική λειτουργία, μπορεί να χρησιμοποιήσει την εικονική λειτουργία της κλάσης βάσης. Αντίθετα, εάν μια παράγωγος κλάση αποτύχει να αντικαταστήσει την καθαρή εικονική συνάρτηση, εμφανίζεται σφάλμα κατά τη συμπλήρωση.
  4. Η βασική κλάση που περιέχει την εικονική συνάρτηση μπορεί να παρασταθεί, δηλαδή μπορεί να δημιουργηθεί το αντικείμενο της. Αντιθέτως, η βασική κλάση που περιέχει καθαρή εικονική συνάρτηση δηλαδή μια αφηρημένη κλάση δεν μπορεί να παρουσιαστεί ως μια αφηρημένη τάξη δεν έχει οριστεί πλήρως.

Σημείωση:
Το πρωτότυπο της «εικονικής λειτουργίας» και της «καθαρής εικονικής λειτουργίας» παραμένει το ίδιο σε όλο το πρόγραμμα.

Συμπέρασμα:

Οι «εικονικές λειτουργίες» και οι «καθαρές εικονικές λειτουργίες» έχουν και τη σημασία τους, όπως και στις «εικονικές λειτουργίες», όλες οι παράγωγες κλάσεις δεν χρειάζεται να επαναπροσδιορίσουν την εικονική συνάρτηση και όπου θέλουμε όλοι οι κλάσεις να επαναπροσδιορίσουν την εικονική λειτουργία, λειτουργεί καλύτερα εκεί.