Παράκαμψη λειτουργίας C ++

Σε αυτό το σεμινάριο, θα μάθουμε για την παράκαμψη της λειτουργίας στο C ++ με τη βοήθεια παραδειγμάτων.

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

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

Αυτό είναι γνωστό ως παράκαμψη συνάρτησης στο C ++. Η συνάρτηση στην παράγωγη κλάση παρακάμπτει τη συνάρτηση στην κατηγορία βάσης.

Παράδειγμα 1: Παράκαμψη συνάρτησης C ++

 // C++ program to demonstrate function overriding #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; ) ); int main() ( Derived derived1; derived1.print(); return 0; )

Παραγωγή

 Παράγωγη συνάρτηση

Εδώ, η ίδια η λειτουργία print()ορίζεται σε δύο Baseκαι Derivedτάξεις.

Έτσι, όταν καλούμε print()από το Derivedαντικείμενο που προέρχεται1, το print()από Derivedεκτελείται με παράκαμψη της συνάρτησης στο Base.

Εργασία παράκαμψης συνάρτησης σε C ++

Πρόσβαση στην παράκαμψη της συνάρτησης στο C ++

Για πρόσβαση στην παράκαμψη της βασικής κλάσης, χρησιμοποιούμε τον τελεστή ανάλυσης εύρους ::.

Μπορούμε επίσης να αποκτήσουμε πρόσβαση στην παράκαμψη της συνάρτησης χρησιμοποιώντας έναν δείκτη της βασικής κλάσης για να δείξουμε ένα αντικείμενο της παραγόμενης κλάσης και στη συνέχεια να καλέσουμε τη συνάρτηση από αυτόν τον δείκτη.

Παράδειγμα 2: Πρόσβαση C ++ Παράκαμψη συνάρτησης στη βασική κλάση

 // C++ program to access overridden function // in main() using the scope resolution operator :: #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; ) ); int main() ( Derived derived1, derived2; derived1.print(); // access print() function of the Base class derived2.Base::print(); return 0; )

Παραγωγή

 Παράγωγη Λειτουργία Βασική Λειτουργία

Εδώ, αυτή η δήλωση

 derived2.Base::print();

έχει πρόσβαση στη print()λειτουργία της κατηγορίας βάσης.

Πρόσβαση στην παράκαμψη συνάρτησης χρησιμοποιώντας αντικείμενο παραγόμενης κλάσης στο C ++

Παράδειγμα 3: Λειτουργία παράκαμψης κλήσεων C ++ από την παράγωγη κλάση

 // C++ program to call the overridden function // from a member function of the derived class #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; // call overridden function Base::print(); ) ); int main() ( Derived derived1; derived1.print(); return 0; )

Παραγωγή

 Παράγωγη Λειτουργία Βασική Λειτουργία

Σε αυτό το πρόγραμμα, ονομάσαμε την παράκαμψη συνάρτησης μέσα στην Derivedίδια την τάξη.

 class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; Base::print(); ) );

Παρατηρήστε τον κωδικό Base::print();, ο οποίος καλεί τη λειτουργία παράκαμψης μέσα στην Derivedτάξη.

Πρόσβαση παράκαμψης συνάρτησης μέσα σε παράγωγη κλάση σε C ++

Παράδειγμα 4: Λειτουργία παράκαμψης κλήσεων C ++ με χρήση δείκτη

 // C++ program to access overridden function using pointer // of Base type that points to an object of Derived class #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" 

Output

 Base Function

In this program, we have created a pointer of Base type named ptr. This pointer points to the Derived object derived1.

 // pointer of Base type that points to derived1 Base* ptr = &derived1;

When we call the print() function using ptr, it calls the overridden function from Base.

 // call function of Base class using ptr ptr->print();

This is because even though ptr points to a Derived object, it is actually of Base type. So, it calls the member function of Base.

In order to override the Base function instead of accessing it, we need to use virtual functions in the Base class.

ενδιαφέροντα άρθρα...