Όλα όσα πρέπει να ξέρετε για την κληρονομικότητα στο C ++



Αυτό το άρθρο θα σας δώσει μια λεπτομερή και περιεκτική γνώση της Κληρονομικότητας στο C ++, είναι διάφοροι τύποι και πώς να το εφαρμόσετε.

Το C ++ είναι μια αντικειμενοστρεφής γλώσσα. Η αφαίρεση δεδομένων, ο πολυμορφισμός, η ενθυλάκωση και η κληρονομικότητα αποτελούν τους ακρογωνιαίους λίθους του OOP. Σε αυτήν την ανάρτηση, θα καταλάβουμε τι είναι η κληρονομιά; Τύποι κληρονομιάς στο C ++ και όλες οι απαραίτητες έννοιες που σχετίζονται με αυτό από το μηδέν. Στο τέλος, θα εξετάσουμε επίσης το μειονέκτημα αυτής της ισχυρής ιδέας και θα προσπαθήσουμε να το λύσουμε.

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

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





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

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



Σύνταξη:

κλάση derived_class: access_type base_class {// class body}

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

σε ποιες περιπτώσεις χρησιμοποιείται το mongodb

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



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

Έτσι, ο μαθητής και η σχολή θα κληρονομήσουν από το XYZ.

Προσδιοριστής πρόσβασης- Καταλάβαμε πώς μια τάξη μπορεί να κληρονομήσει μια άλλη τάξη. Ωστόσο, μερικοί άνθρωποι μπορεί να πουν ότι είναι μια μη ασφαλής μέθοδος, καθώς όλα τα χαρακτηριστικά και οι μέθοδοι της βασικής τάξης ή της γονικής τάξης κοινοποιούνται στην παιδική τάξη ή στην παράγωγη τάξη. Για παράδειγμα, εάν μια τάξη «Τράπεζα» κληρονομείται από την κατηγορία «πελάτες» και «επενδυτές». Τα χαρακτηριστικά της κατηγορίας «Τράπεζα», όπως «vaultpassword», άλλες πληροφορίες που σχετίζονται με πελάτες και ιδιωτικά δεδομένα κοινοποιούνται με την κατηγορία «πελατών» και «επενδυτών» που δεν είναι ασφαλής.

Για την επίλυση του παραπάνω προβλήματος, το C ++ χρησιμοποιεί προσδιοριστές πρόσβασης για να περιορίσει την πρόσβαση των χαρακτηριστικών κατηγορίας βάσης στην κλάση που προέρχεται. Υπάρχουν συνολικά 3 τύποι προσδιοριστών πρόσβασης στο C ++

  1. Δημόσιο
  2. Ιδιωτικός
  3. Προστατευμένο

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

Προσδιορισμός πρόσβασης Δημόσια δεδομένα Ιδιωτικά δεδομένα Προστατευμένα δεδομένα
Ιδιωτικός Δεν κληρονομείταιΔεν κληρονομείταιΔεν κληρονομείται
Προστατευμένο Προστατευμένο Ιδιωτικός Προστατευμένο
Δημόσιο Δημόσιο Ιδιωτικός Προστατευμένο

Ενιαία κληρονομικότητα

Η Ενιαία Κληρονομιά μπορεί να θεωρηθεί ως η απλή μορφή κληρονομιάς βανίλιας. Σε μία κληρονομιά, μια ενιαία τάξη κληρονομεί από μια βασική τάξη.

#include χρησιμοποιώντας namespace std class Train {int Numberofwheels int Numberofcoaches public: void Traininfo (int n, int m) {Numberofwheels = n Numberofcoaches = m} void showinfo () {cout<Αυτή η περίπτωση κληρονομιάς ονομάζεται πολυεπίπεδη κληρονομιά. Η τάξη μεταξύ της πρώτης και της τελευταίας τάξης είναι επίσης γνωστή ως ενδιάμεση βασική τάξη.Τι νομίζετε, μπορεί η τελευταία τάξη να κληρονομήσει μέλη της πρώτης τάξης; Ναι μπορεί

#include χρησιμοποιώντας namespace std class First {protected: int a public: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' < 

Παραγωγή:

Τιμή a = 10

Τιμή b = 20

Τιμή c = 30

Τιμή d = 50

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

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

#include χρησιμοποιώντας το namespace std class College {public: College () {cout<< 'We are in class College' << endl } } class Student: public College { } class Faculty: public College { } int main() { Student student Faculty faculty return 0 }

Παραγωγή:

Είμαστε στην τάξη College

Είμαστε στην τάξη College

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

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

#include using namespace std class One {protected: int a public: void getinfoOne (int x) {a = x}} class Two {protected: int b public: void getinfoTwo (int y) {b = y}} κλάση Κύρια: public One, public Two {public: void Display () {std :: cout<< 'Value of a = ' < Σε αυτό το σημείο, έχουμε καλή κατανόηση όλων των τύπων κληρονομιάς που χρησιμοποιούνται στο C ++. Αλλά, περιμένετε τι εάν θέλουμε να χρησιμοποιήσουμε 2 διαφορετικούς τύπους κληρονομιάς; Είναι δυνατόν? Ναι, είναι δυνατό με τη βοήθεια της υβριδικής κληρονομικότητας. Στην υβριδική κληρονομικότητα, συνδυάζουμε 2 διαφορετικούς τύπους κληρονομιάς. Για παράδειγμα- Πολυεπίπεδη και πολλαπλή κληρονομιά, Ιεραρχική και πολλαπλή κληρονομιά κ.λπ.

#include using namespace std class World {protected: int a public: void getinfoWorld (int x) {a = x}} class Continent: public World {προστατευμένο: int b public: void getinfoContinent (int y) {b = y}} class Country {protected: int d public: void getinfoCountry (int m) {d = m}} τάξη Αυστραλία: δημόσια ήπειρος, δημόσια χώρα {public: void Display () {std :: cout<< 'Value of a = ' < 

Ας καταλάβουμε το παραπάνω διάγραμμα που θα μας βοηθήσει στην κατανόηση του προβλήματος των διαμαντιών. Η κλάση Β και η κλάση Γ κληρονομούνται από την τάξη Α, συνεπώς τόσο η κατηγορία Α όσο και η κατηγορία Β έχουν χαρακτηριστικά και μεθόδους της κατηγορίας Α. εάν η κλάση Δ κληρονομεί από την Κλάση Β καθώς και από την τάξη Γ. η τάξη Δ θα έχει όλα τα χαρακτηριστικά της κατηγορίας Β και της κατηγορίας Γ Έχει επίσης όλα τα χαρακτηριστικά της κλάσης Α που κληρονομείται από την τάξη Β καθώς και από την τάξη Γ. Ως εκ τούτου, αν κάνουμε ένα αντικείμενο της κατηγορίας Δ και καλέσουμε μια μέθοδο της κατηγορίας Α, θα δημιουργηθεί μια αμφίσημη κατάσταση και ο μεταγλωττιστής θα μπερδευτεί από πού Πρέπει να ταξινομήσει τη μέθοδο Α, από την κατηγορία Β ή την τάξη Δ.

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

τάξη Α {} κλάση Β: εικονικό κοινό Α {} κλάση Γ: εικονικό κοινό Α {} κλάση Δ: δημόσιο Γ, δημόσιο Δ {}

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

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