Πώς να εφαρμόσετε την εικονική λειτουργία στο C ++;

Αυτό το άρθρο θα σας παρουσιάσει μια ακόμη ιδέα προγραμματισμού που είναι η Εικονική λειτουργία στο C ++. Η ιδέα θα υποστηριχθεί με επίδειξη.

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

Ας ξεκινήσουμε λοιπόν με αυτό το άρθρο σχετικά με την Εικονική Λειτουργία στο C ++





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

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

Προχωρώντας με αυτό το άρθρο σχετικά με την Εικονική λειτουργία στο C ++



Κανόνες για εικονική λειτουργία στο C ++:

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

Προχωρώντας με αυτό το άρθρο σχετικά με την Εικονική λειτουργία στο C ++.

Τι είναι δεσμευτικό;

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

Προχωρώντας με αυτό το άρθρο σχετικά με την Εικονική λειτουργία στο C ++



Πρώιμη δέσμευση

Η έγκαιρη δέσμευση είναι ένα φαινόμενο στο οποίο η απόφαση για αντιστοίχιση διαφόρων κλήσεων συνάρτησης συμβαίνει στον ίδιο τον χρόνο μεταγλώττισης και ο μεταγλωττιστής συνδέει άμεσα τη σύνδεση με διευθύνσεις. Είναι επίσης γνωστό ως Static Binding ή Compile-time Binding.

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

Παράδειγμα

τι είναι υπερβολικό στη μηχανική μάθηση
# συμπερίληψη με χρήση χώρου ονομάτων std class Animals {public: void sound () {cout<< 'Genric animal sound' << endl } } class Cats: public Animals { public: void sound() { cout << 'Cat meow' <ήχος () // πρώιμη δεσμευτική επιστροφή 0}

Παραγωγή

Έξοδος - Εικονική λειτουργία σε C ++ - Edureka

διευκρινίσεις ιόν
Σε αυτό το παράδειγμα, δημιουργήσαμε ένα δείκτη a για τη γονική τάξη Animals. Στη συνέχεια γράφοντας a = & c, ο δείκτης «a» άρχισε να αναφέρεται στο αντικείμενο c της τάξης Cats.
a -> ήχος () - Όταν καλείτε τον ήχο της συνάρτησης () που υπάρχει και στις δύο τάξεις από το δείκτη 'a', κλήθηκε η λειτουργία της γονικής τάξης, ακόμη και αν ο δείκτης αναφέρεται στο αντικείμενο της κλάσης Γάτες .

Αυτό οφείλεται στο Early Binding. Γνωρίζουμε ότι το «a» είναι δείκτης της γονικής τάξης που αναφέρεται στο αντικείμενο της παιδικής τάξης. Δεδομένου ότι η πρώιμη δέσμευση λαμβάνει χώρα κατά το χρόνο μεταγλώττισης, επομένως όταν ο μεταγλωττιστής είδε ότι το «a» είναι δείκτης της γονικής κλάσης, ταιριάζει με την κλήση με τη λειτουργία «ήχου ()» της μητρικής κλάσης χωρίς αναζήτηση αντικειμένου του δείκτη αναφέρεται στο.

Προχωρώντας με αυτό το άρθρο σχετικά με την Εικονική λειτουργία στο C ++

παραδείγματα προγράμματος java για βρόχο

Αργά δεσμευτική

Σε καθυστέρηση δέσμευσης, ο μεταγλωττιστής προσδιορίζει το αντικείμενο κατά το χρόνο εκτέλεσης και στη συνέχεια ταιριάζει με την κλήση συνάρτησης με τη σωστή λειτουργία. Είναι επίσης γνωστό ως Dynamic Binding ή Runtime Binding.

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

Παράδειγμα

#include χρησιμοποιώντας το namespace std class Animals {public: virtual void sound () {cout<< 'Genric aniaml sound' << endl } } class Cats: public Animals { public: void sound() { cout << 'Cats meow' <ήχος () επιστροφή 0}

Παραγωγή

Εξήγηση
Εδώ ο ήχος συνάρτησης () της βασικής κλάσης γίνεται εικονικός, έτσι ο μεταγλωττιστής εκτελεί τώρα καθυστερημένη δέσμευση για αυτήν τη συνάρτηση. Τώρα, η συνάρτηση κλήσης της συνάρτησης ήχου () θα ταιριάζει με τον ορισμό της συνάρτησης κατά το χρόνο εκτέλεσης. Δεδομένου ότι ο μεταγλωττιστής αναγνωρίζει τώρα το δείκτη «a» ως αναφορά στο αντικείμενο «c» της προερχόμενης κλάσης Cats, θα καλέσει τη λειτουργία ήχου () της κλάσης Cats.

Προχωρώντας με αυτό το άρθρο σχετικά με την Εικονική λειτουργία στο C ++

Καθαρή εικονική λειτουργία

Μια καθαρή εικονική συνάρτηση στο C ++ είναι μια εικονική συνάρτηση για την οποία δεν έχουμε εφαρμογή, το δηλώνουμε μόνο. Μια καθαρή εικονική συνάρτηση δηλώνεται εκχωρώντας 0 στη δήλωση.

εικονικός κενός ήχος () = 0

Εδώ ο ήχος () είναι μια καθαρή εικονική λειτουργία.

Προχωρώντας με αυτό το άρθρο σχετικά με την Εικονική λειτουργία στο C ++

Περίληψη τάξη

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

Παράδειγμα

#include using namespace std class Employee // abstract base class {virtual int getSalary () = 0 // pure virtual function} class Employee_1: public Employee {int gaji public: Employee_1 (int s) {gaji = s} int getSalary () {επιστροφή μισθού}} τάξη Υπάλληλος_2: δημόσιος υπάλληλος {int μισθό δημόσιο: Υπάλληλος_2 (int t) {gaji = t} int getSalary () {return gaji}} int main () {Employee_1 e1 (5000) Employee_2 e2 (3000) int a, ba = e1.getSalary () b = e2.getSalary () cout<< 'Salary of Developer : ' << a << endl cout << 'Salary of Driver : ' << b << endl return 0 } 

Παραγωγή

πώς να φτιάξετε ένα διπλό int στην Ιάβα

Εξήγηση
Η συνάρτηση «getSalary ()» στην κατηγορία Υπάλληλος είναι μια καθαρή εικονική συνάρτηση. Δεδομένου ότι η κατηγορία υπαλλήλων περιέχει την καθαρή εικονική συνάρτηση, επομένως είναι μια αφηρημένη βασική κλάση.
Δεδομένου ότι η καθαρή εικονική συνάρτηση ορίζεται στις υποκατηγορίες, επομένως η συνάρτηση «getSalary ()» ορίζεται και στις δύο υποκατηγορίες της κατηγορίας Employee, δηλαδή στο Employee_1 και το Employee_2.

Προχωρώντας με αυτό το άρθρο σχετικά με την Εικονική λειτουργία στο C ++

Παράδειγμα εικονικής λειτουργίας

#include χρησιμοποιώντας το namespace std class base {public: void function_1 () {cout<< 'base class function 1n' } virtual void function_2() { cout << 'base class function 2n' } virtual void function_3() { cout << 'base class function 3n' } virtual void function_4() { cout << 'base class function 4n' } } class derived : public base { public: void function_1() { cout << 'derived class function 1n' } void function_2() { cout << 'derived class function 2n' } void function_4(int x) { cout function_2 () ptr-> function_3 () ptr-> function_4 ()}

Παραγωγή

Εξήγηση
Για τη συνάρτηση function_1 (), καλείται η έκδοση βασικής κλάσης της συνάρτησης, η συνάρτηση_2 () παρακάμπτεται στην παράγωγη κλάση, επομένως καλείται η παράγωγη έκδοση κλάσης, η συνάρτηση_3 () δεν παρακάμπτεται στην παράγωγη κλάση και είναι εικονική συνάρτηση, επομένως καλείται η έκδοση βασικής κατηγορίας, Παρομοίως το function_4 () δεν παρακάμπτεται, επομένως καλείται η έκδοση βασικής κατηγορίας.

Έτσι, έχουμε φτάσει στο τέλος αυτού του άρθρου σχετικά με την «Εικονική λειτουργία στο C ++». Εάν θέλετε να μάθετε περισσότερα, δείτε το από την Edureka, μια αξιόπιστη διαδικτυακή εταιρεία μάθησης. Το μάθημα εκπαίδευσης και πιστοποίησης Java J2EE και SOA της Edureka έχει σχεδιαστεί για να σας εκπαιδεύσει τόσο για βασικές όσο και για προχωρημένες ιδέες Java μαζί με διάφορα πλαίσια Java όπως το Hibernate & Spring.

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