C ++ Πολλαπλή, Πολυεπίπεδη και Ιεραρχική Κληρονομικότητα

Σε αυτό το άρθρο, θα μάθετε για διαφορετικά μοντέλα κληρονομιάς στον προγραμματισμό C ++: Πολλαπλές, Πολυεπίπεδες και Ιεραρχικές κληρονομικές με παραδείγματα.

Το κληρονομικό είναι ένα από τα βασικά χαρακτηριστικά μιας αντικειμενοστρεφούς γλώσσας προγραμματισμού. Επιτρέπει στους προγραμματιστές λογισμικού να αντλήσουν μια νέα τάξη από την υπάρχουσα τάξη. Η παράγωγη κλάση κληρονομεί τα χαρακτηριστικά της βασικής κλάσης (υπάρχουσα κλάση).

Υπάρχουν διάφορα μοντέλα κληρονομιάς στον προγραμματισμό C ++.

C ++ Πολυεπίπεδη κληρονομικότητα

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

τάξη Α (…); κλάση Β: δημόσια Α (…) · τάξη Γ: δημόσια Β (………) ·

Εδώ, η κλάση Β προέρχεται από την βασική κατηγορία Α και η κατηγορία Γ προέρχεται από την παράγωγη κατηγορία Β.

Παράδειγμα 1: Πολυεπίπεδη κληρονομικότητα C ++

 #include using namespace std; class A ( public: void display() ( cout<<"Base class content."; ) ); class B : public A ( ); class C : public B ( ); int main() ( C obj; obj.display(); return 0; )

Παραγωγή

 Βασικό περιεχόμενο κατηγορίας.

Σε αυτό το πρόγραμμα, η τάξη Γ προέρχεται από την τάξη Β (η οποία προέρχεται από την βασική τάξη Α).

Το αντικείμενο obj της κλάσης C ορίζεται στη main()συνάρτηση.

Όταν display()καλείται η συνάρτηση, display()εκτελείται στην κλάση Α. Είναι επειδή δεν υπάρχει display()λειτουργία στην τάξη Γ και στην τάξη Β.

Ο μεταγλωττιστής αναζητά πρώτα τη display()συνάρτηση στην κλάση Γ. Δεδομένου ότι η συνάρτηση δεν υπάρχει εκεί, αναζητά τη συνάρτηση στην κλάση Β (καθώς το C προέρχεται από το Β).

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

Εάν display()υπάρχει συνάρτηση σε C, ο μεταγλωττιστής παρακάμπτει την display()κλάση Α (λόγω της παράκαμψης της συνάρτησης μέλους).

C ++ Πολλαπλή κληρονομικότητα

Στον προγραμματισμό C ++, μια τάξη μπορεί να προέρχεται από περισσότερους από έναν γονείς. Για παράδειγμα: Ένα νυχτερίδα τάξης προέρχεται από βασικές τάξεις Mammal και WingedAnimal. Είναι λογικό γιατί το ρόπαλο είναι θηλαστικό καθώς και φτερωτό ζώο.

Παράδειγμα 2: Πολλαπλή κληρονομικότητα στον προγραμματισμό C ++

 #include using namespace std; class Mammal ( public: Mammal() ( cout << "Mammals can give direct birth." << endl; ) ); class WingedAnimal ( public: WingedAnimal() ( cout << "Winged animal can flap." << endl; ) ); class Bat: public Mammal, public WingedAnimal ( ); int main() ( Bat b1; return 0; ) 

Παραγωγή

Τα θηλαστικά μπορούν να γεννήσουν άμεσα. Το φτερωτό ζώο μπορεί να κτυπήσει.

Αβεβαιότητα στην πολλαπλή κληρονομικότητα

Το πιο προφανές πρόβλημα με πολλαπλή κληρονομικότητα εμφανίζεται κατά την παράκαμψη της λειτουργίας.

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

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

 class base1 ( public: void someFunction( ) (… .… … . ) ); class base2 ( void someFunction( ) (… .… … . ) ); class derived : public base1, public base2 ( ); int main() ( derived obj; obj.someFunction() // Error! )  

Αυτό το πρόβλημα μπορεί να λυθεί χρησιμοποιώντας τη συνάρτηση επίλυσης πεδίου για να καθορίσετε ποια συνάρτηση ταξινομεί είτε base1 ή base2

 int main () (obj.base1 :: someFunction (); // Η συνάρτηση της κατηγορίας base1 ονομάζεται obj.base2 :: someFunction (); // Η λειτουργία της κατηγορίας base2 ονομάζεται.)

C ++ Ιεραρχική κληρονομικότητα

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

Για παράδειγμα: Η Φυσική, η Χημεία, η Βιολογία προέρχονται από την τάξη των Επιστημών.

Σύνταξη Ιεραρχικής Κληρονομικότητας

 class base_class (…) class first_derived_class: public base_class (…) class second_derived_class: public base_class (…) class third_derived_class: δημόσια base_class (…)

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