Συνιστάται, 2024

Επιλογή Συντάκτη

Διαφορά μεταξύ υπερφόρτωσης λειτουργίας και υπέρβασης στην C ++

Ο πολυμορφισμός είναι ένα από τα βασικά χαρακτηριστικά του OOP. Απλώς σημαίνει "να χρησιμοποιείτε ένα όνομα για πολλαπλές μορφές". Ο πολυμορφισμός μπορεί να υλοποιηθεί με τη χρήση "υπερφόρτωσης λειτουργίας", "υπερφόρτωσης φορέα" και "εικονικής λειτουργίας". Τόσο η «υπερφόρτωση» όσο και η «υπεροχή» συνεπάγονται την έννοια του πολυμορφισμού. Εδώ, η «υπερφόρτωση» είναι ο πολυμορφισμός του χρόνου και ο «υπερισχύων» είναι ο πολυμορφισμός χρόνου εκτέλεσης. Μελετώντας περαιτέρω, αν μιλάμε για τη μεγάλη διαφορά στην «υπερφόρτωση» και «υπερισχύει». Στην 'υπερφόρτωση' επαναπροσδιορίζουμε τις υπερφορτωμένες λειτουργίες με το ίδιο όνομα λειτουργίας, αλλά διαφορετικό αριθμό και τύπο παραμέτρων. Στο «πρωταγωνιστικό» πρωτότυπο της overridden συνάρτησης είναι το ίδιο καθ 'όλη τη διάρκεια του προγράμματος, αλλά η λειτουργία που πρέπει να αντικατασταθεί προηγείται από τη λέξη «virtual» της βασικής κλάσης και επαναπροσδιορίζεται από την παράγωγη κλάση χωρίς λέξη-κλειδί.

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


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

Βάση σύγκρισηςΥπερφόρτωσηΥπέρβαση
ΠρωτότυποΟ πρωτότυπος διαφέρει καθώς ο αριθμός ή ο τύπος της παραμέτρου μπορεί να διαφέρουν.Όλες οι όψεις του πρωτοτύπου πρέπει να είναι ίδιες.
Λέξη κλειδίΚαμία λέξη-κλειδί δεν εφαρμόστηκε κατά την υπερφόρτωση.Η λειτουργία που πρέπει να αντικατασταθεί προηγείται από τη λέξη «εικονική», στην κατηγορία βάσης.
Διακριτικός παράγονταςΟ αριθμός ή ο τύπος της παραμέτρου διαφέρει, πράγμα που καθορίζει την εκδοχή της λειτουργίας που καλείται.Η λειτουργία της οποιασδήποτε κλάσης ονομάζεται από τον δείκτη, καθορίζεται από τη διεύθυνση του αντικειμένου της κλάσης που αντιστοιχεί στον δείκτη.
Ορισμός προτύπουΟι λειτουργίες επαναπροσδιορίζονται με το ίδιο όνομα, αλλά με διαφορετικό αριθμό και τύπο παραμέτρου.Λειτουργία ορίζεται, που προηγείται από μια λέξη-κλειδί 'εικονική' στην κύρια κλάση και επαναπροσδιορίζεται από παράγωγη κλάση με λέξη-κλειδί έξω.
Ώρα ολοκλήρωσηςΧρόνος σύνταξης.Εκτελέστε χρόνο.
Κατασκευαστής / εικονική λειτουργίαΟι κατασκευαστές μπορούν να υπερφορτωθούν.Η εικονική λειτουργία μπορεί να αντικατασταθεί.
Καταστροφέας
Ο καταστροφέας δεν μπορεί να υπερφορτωθεί.Ο καταστροφέας μπορεί να αντικατασταθεί.
ΔεσμευτικόςΗ υπερφόρτωση επιτυγχάνει έγκαιρη δέσμευση.Η απαγόρευση αναφέρεται στην καθυστερημένη σύνδεση.

Ορισμός της υπερφόρτωσης

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

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

Υλοποίηση υπερφορτώσεων σε C ++

 τάξη υπερφόρτωσης {int a, b; δημόσιο: int φορτίο (int x) {// πρώτη φόρτιση () συνάρτηση a = x; επιστροφή a; } int φορτίο (int x, int y) {// δεύτερη φόρτιση () συνάρτηση a = x; b = y; επιστροφή a * b; }}. int main () {υπερφόρτιση O1; O1.load (20). // πρώτη φόρτωση () κλήση λειτουργίας O1.load (20, 40); // κλήση λειτουργίας δεύτερης φόρτωσης ()} 

Εδώ φορτίο λειτουργίας () της υπερφόρτωσης κλάσης έχει υπερφορτωθεί. Οι δύο υπερφορτωμένες λειτουργίες της κλάσης μπορούν να διακριθούν με τρόπο που η συνάρτηση πρώτου φορτίου () δέχεται μόνο μία μοναδιαία παράμετρο, ενώ η δεύτερη συνάρτηση φορτίου () δέχεται δύο ακέραιες παραμέτρους. Όταν το αντικείμενο της υπερφόρτωσης κλάσης καλεί τη λειτουργία load () με μία μόνο παράμετρο, τότε καλείται η πρώτη φόρτιση (). Όταν το αντικείμενο φορτώνει τη συνάρτηση load () που διέρχεται από δύο παραμέτρους, καλείται η δεύτερη συνάρτηση load ().

Ορισμός της απαγόρευσης

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

Ένα από τα σημαντικότερα πράγματα που πρέπει να θυμόμαστε σε περίπτωση επικρίσεων είναι ότι το πρωτότυπο της υπερτιμημένης συνάρτησης δεν πρέπει να αλλάζει, ενώ η παράγωγη κλάση την επαναπροσδιορίζει. Όταν δίνεται μια κλήση στην υπερτιμημένη λειτουργία, η C ++ καθορίζει ποια έκδοση της συνάρτησης καλείται βάσει του «τύπου του αντικειμένου που υποδεικνύεται από έναν δείκτη» με τον οποίο γίνεται η κλήση λειτουργίας.

Εφαρμογή της Υπέρβασης σε C ++

 class class {public: virtual void funct () {// εικονική λειτουργία της βασικής κλάσης cout << "Αυτή είναι η funct () της βασικής κλάσης"; }}. class derived1: δημόσια βάση {public: void funct () {// εικονική συνάρτηση της κλάσης βάσης επανακαθορισμένη στην derived1 class cout << "Αυτή είναι η funct () της derived1 της κατηγορίας"; }}. class derived2: δημόσια βάση {public: void funct () {// εικονική συνάρτηση της κλάσης βάσης επανακαθορισμένη στην κλάση derived2 class  funct (); // κλήση προς derived1 κλάση funct (). * p = & d2. p-> funct (); // κλήση σε κλάση derived2 (). επιστροφή 0? }} 

Εδώ, υπάρχει μια ενιαία κλάση βάσης η οποία κληρονομείται δημοσίως από δύο παράγωγες κλάσεις. Μια εικονική συνάρτηση ορίζεται σε μια βασική κλάση με μια λέξη-κλειδί «εικονική» και επαναπροσδιορίζεται και από τις παράγωγες κλάσεις χωρίς λέξη-κλειδί. Στην κύρια (), η βασική κλάση δημιουργεί μια μεταβλητή δείκτη 'p' και ένα αντικείμενο 'b'. Η κλάση 'derived1' δημιουργεί ένα αντικείμενο d1 και η κλάση derived2 δημιουργεί ένα αντικείμενο d2 '.

Τώρα, αρχικά η διεύθυνση του αντικειμένου της κατηγορίας βάσης 'b' αντιστοιχεί στον δείκτη της βασικής κλάσης 'p'. 'p' δίνει μια κλήση στη λειτουργία funct (), έτσι καλείται μια συνάρτηση της κλάσης βάσης. Στη συνέχεια, η διεύθυνση του παραγόμενου αντικειμένου τάξης 'd1' έχει εκχωρηθεί στο pointer 'p', και πάλι δίνει call to funct (); εδώ εκτελείται η λειτουργία funct () της κλάσης derived1. Τέλος, ο δείκτης 'p' εκχωρείται στο αντικείμενο της κλάσης derived2. Στη συνέχεια, η κλήση 'p' λειτουργεί funct () που εκτελεί τη λειτουργία func () της κλάσης derived2.

Αν η κλάση derived1 / derived2 δεν επαναπροσδιορίσει το funct (), τότε θα πρέπει να ονομάζεται το funct () της βασικής κλάσης, καθώς η εικονική συνάρτηση είναι 'ιεραρχική'.

Βασικές διαφορές μεταξύ υπερφόρτωσης και υπέρβασης

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

Ομοιότητες

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

συμπέρασμα

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

Top