C ++ Κληρονομικότητα

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

Το κληρονομικό είναι ένα από τα βασικά χαρακτηριστικά του αντικειμενοστραφούς προγραμματισμού στο C ++. Μας επιτρέπει να δημιουργήσουμε μια νέα τάξη (προερχόμενη κλάση) από μια υπάρχουσα τάξη (βασική τάξη).

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

 class Animal ( // eat() function // sleep() function ); class Dog : public Animal ( // bark() function );

Εδώ, η Dogτάξη προέρχεται από την Animalτάξη. Δεδομένου ότι Dogπροέρχεται από Animal, τα μέλη του Animalείναι προσβάσιμα Dog.

Κληρονομικότητα σε C ++

Παρατηρήστε τη χρήση της λέξης-κλειδιού publicενώ κληρονομείτε το σκυλί από το Animal

 class Dog : public Animal (… );

Μπορούμε επίσης να χρησιμοποιήσουμε τις λέξεις-κλειδιά privateκαι protectedαντί για public. Θα μάθετε για τις διαφορές μεταξύ της χρήσης private, publicκαι protectedαργότερα σε αυτό το σεμινάριο.

είναι-μια σχέση

Η κληρονομικότητα είναι μια σχέση . Χρησιμοποιούμε κληρονομιά μόνο εάν υπάρχει σχέση μεταξύ των δύο τάξεων.

Ορίστε μερικά παραδείγματα:

  • Ένα αυτοκίνητο είναι ένα όχημα.
  • Το πορτοκάλι είναι φρούτο.
  • Ένας χειρουργός είναι γιατρός.
  • Ένα σκυλί είναι ένα ζώο.

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

 // C++ program to demonstrate inheritance #include using namespace std; // base class class Animal ( public: void eat() ( cout << "I can eat!" << endl; ) void sleep() ( cout << "I can sleep!" << endl; ) ); // derived class class Dog : public Animal ( public: void bark() ( cout << "I can bark! Woof woof!!" << endl; ) ); int main() ( // Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat(); dog1.sleep(); // Calling member of the derived class dog1.bark(); return 0; )

Παραγωγή

Μπορώ να φάω! Μπορώ να κοιμηθώ! Μπορώ να γαβγίσω! ΓΑΒ ΓΑΒ!!

Εδώ, το dog1 (το αντικείμενο της προερχόμενης κλάσης Dog) μπορεί να έχει πρόσβαση σε μέλη της βασικής κλάσης Animal. Είναι επειδή Dogκληρονομείται από Animal.

 // Calling members of the Animal class dog1.eat(); dog1.sleep();

Μέλη που προστατεύονται από το C ++

Ο τροποποιητής πρόσβασης protectedείναι ιδιαίτερα σχετικός όταν πρόκειται για κληρονομιά C ++.

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

Χρειαζόμαστε protectedμέλη εάν θέλουμε να αποκρύψουμε τα δεδομένα μιας κλάσης, αλλά εξακολουθούμε να θέλουμε αυτά τα δεδομένα να κληρονομηθούν από τις παράγωγες τάξεις της.

Για να μάθετε περισσότερα σχετικά με τα προστατευόμενα, ανατρέξτε στο μάθημα τροποποιητών πρόσβασης C ++

Παράδειγμα 2: Μέλη που προστατεύονται από C ++

 // C++ program to demonstrate protected members #include #include using namespace std; // base class class Animal ( private: string color; protected: string type; public: void eat() ( cout << "I can eat!" << endl; ) void sleep() ( cout << "I can sleep!" << endl; ) void setColor(string clr) ( color = clr; ) string getColor() ( return color; ) ); // derived class class Dog : public Animal ( public: void setType(string tp) ( type = tp; ) void displayInfo(string c) ( cout << "I am a " << type << endl; cout << "My color is " << c << endl; ) void bark() ( cout << "I can bark! Woof woof!!" << endl; ) ); int main() ( // Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat(); dog1.sleep(); dog1.setColor("black"); // Calling member of the derived class dog1.bark(); dog1.setType("mammal"); // Using getColor() of dog1 as argument // getColor() returns string data dog1.displayInfo(dog1.getColor()); return 0; )

Παραγωγή

Μπορώ να φάω! Μπορώ να κοιμηθώ! Μπορώ να γαβγίσω! ΓΑΒ ΓΑΒ!! Είμαι θηλαστικό Το χρώμα μου είναι μαύρο

Εδώ, ο μεταβλητός τύπος είναι protectedκαι είναι επομένως προσβάσιμος από την παράγωγη κλάση Dog. Μπορούμε να το δούμε καθώς αρχικοποιήσαμε typeστην Dogτάξη χρησιμοποιώντας τη συνάρτηση setType().

Από την άλλη πλευρά, το privateμεταβλητό χρώμα δεν μπορεί να αρχικοποιηθεί στο Dog.

 class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );

Επίσης, δεδομένου ότι η protectedλέξη-κλειδί αποκρύπτει δεδομένα, δεν μπορούμε να έχουμε πρόσβαση στον τύπο απευθείας από ένα αντικείμενο Dogή Animalκατηγορία

 // Error: member "Animal::type" is inaccessible dog1.type = "mammal";

Πρόσβαση στις λειτουργίες C ++ Inheritance

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

Μέχρι στιγμής, έχουμε χρησιμοποιήσει τη publicλέξη-κλειδί για να κληρονομήσουμε μια τάξη από μια προϋπάρχουσα βασική τάξη. Ωστόσο, μπορούμε επίσης να χρησιμοποιήσουμε τις λέξεις-κλειδιά privateκαι protectedγια να κληρονομήσουμε τάξεις. Για παράδειγμα,

 class Animal ( // code ); class Dog : private Animal ( // code );
 class Cat : protected Animal ( // code );

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

  1. δημόσιο: Εάν μια παράγωγη κλάση δηλώνεται σε publicκατάσταση λειτουργίας, τότε τα μέλη της βασικής τάξης κληρονομούνται από την παράγωγη τάξη όπως είναι.
  2. ιδιωτικό: Σε αυτήν την περίπτωση, όλα τα μέλη της βασικής τάξης γίνονται privateμέλη στην παράγωγη τάξη.
  3. προστατευμένο: Τα publicμέλη της βασικής τάξης γίνονται protectedμέλη στην παράγωγη τάξη.

Τα privateμέλη της βασικής τάξης είναι πάντα privateστην παράγωγη τάξη.

Για να μάθετε περισσότερα, επισκεφτείτε το δημόσιο, ιδιωτικό, προστατευμένο σεμινάριο κληρονομιάς του C ++.

Αντικατάσταση της λειτουργίας μέλους στην κληρονομικότητα

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

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

Η συνάρτηση μέλους της προερχόμενης κλάσης παρακάμπτει τη συνάρτηση μέλους της κατηγορίας βάσης.

Μάθετε περισσότερα σχετικά με την παράκαμψη της λειτουργίας στο C ++.

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

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