types inheritance c
Εξερευνήστε όλους τους τύπους κληρονομικότητας στο C ++ με παραδείγματα.
Στο προηγούμενο σεμινάριό μας, μάθαμε για την κληρονομιά στο C ++. Ανάλογα με τον τρόπο που προέρχεται η τάξη ή πόσες βασικές τάξεις κληρονομεί μια τάξη, έχουμε τους ακόλουθους τύπους κληρονομιάς:
- Ενιαία κληρονομικότητα
- Πολλαπλή κληρονομικότητα
- Πολυεπίπεδη κληρονομικότητα
- Ιεραρχική κληρονομικότητα
- Υβριδική κληρονομικότητα
=> Δείτε εδώ για να εξερευνήσετε την πλήρη λίστα μαθημάτων C ++.
Τι θα μάθετε:
Τύποι κληρονομικότητας
Δίνεται παρακάτω μια εικονική αναπαράσταση των διαφόρων τύπων κληρονομιάς.
Θα δούμε κάθε τύπο κληρονομιάς με παραδείγματα στις παρακάτω ενότητες.
# 1) Ενιαία κληρονομικότητα
Σε μία κληρονομιά, μια τάξη προέρχεται μόνο από μία βασική τάξη. Αυτό σημαίνει ότι υπάρχει μόνο μία υποκατηγορία που προέρχεται από μία superclass.
Η μεμονωμένη κληρονομιά δηλώνεται συνήθως ως εξής:
class subclassname : accessspecifier superclassname { //class specific code; };
Δίνεται παρακάτω ένα πλήρες Παράδειγμα Ενιαίας Κληρονομικότητας.
#include #include using namespace std; class Animal { string name=''; public: int tail=1; int legs=4; }; class Dog : public Animal { public: void voiceAction() { cout<<'Barks!!!'; } }; int main() { Dog dog; cout<<'Dog has '< Παραγωγή:
Ο σκύλος έχει 4 πόδια
Ο σκύλος έχει 1 ουρά
Φλοιός σκύλου !!!
Έχουμε μια τάξη Animal ως βασική τάξη από την οποία έχουμε δημιουργήσει έναν σκύλο subclass. Ο σκύλος της κατηγορίας κληρονομεί όλα τα μέλη της τάξης των ζώων και μπορεί να επεκταθεί ώστε να συμπεριλάβει τις δικές του ιδιότητες, όπως φαίνεται από την έξοδο.
Η ενιαία κληρονομιά είναι η απλούστερη μορφή κληρονομιάς.
# 2) Πολλαπλή κληρονομικότητα
Η πολλαπλή κληρονομικότητα απεικονίζεται παρακάτω.
Η πολλαπλή κληρονομιά είναι ένας τύπος κληρονομιάς στον οποίο μια τάξη προέρχεται από περισσότερες από μία τάξεις. Όπως φαίνεται στο παραπάνω διάγραμμα, η κλάση Γ είναι μια υποκατηγορία που έχει την κατηγορία Α και την κατηγορία Β ως μητρική της.
Σε ένα σενάριο πραγματικής ζωής, ένα παιδί κληρονομεί από τον πατέρα και τη μητέρα του. Αυτό μπορεί να θεωρηθεί ως παράδειγμα πολλαπλής κληρονομιάς.
Παρουσιάζουμε το παρακάτω πρόγραμμα για να δείξουμε την Πολλαπλή Κληρονομικότητα.
#include using namespace std; //multiple inheritance example class student_marks { protected: int rollNo, marks1, marks2; public: void get() { cout <> rollNo; cout <> marks1 >> marks2; } }; class cocurricular_marks { protected: int comarks; public: void getsm() { cout <> comarks; } }; //Result is a combination of subject_marks and cocurricular activities marks class Result : public student_marks, public cocurricular_marks { int total_marks, avg_marks; public: void display() { total_marks = (marks1 + marks2 + comarks); avg_marks = total_marks / 3; cout << '
Roll No: ' << rollNo << '
Total marks: ' << total_marks; cout << '
Average marks: ' << avg_marks; } }; int main() { Result res; res.get(); //read subject marks res.getsm(); //read cocurricular activities marks res.display(); //display the total marks and average marks }
Παραγωγή:
Πληκτρολογήστε το Roll No. .: 25
Εισαγάγετε τις δύο υψηλότερες βαθμολογίες: 40 50
Εισαγάγετε το σήμα για Συμμετοχικές Δραστηριότητες: 30
Νο. Roll: 25
Σύνολο βαθμολογιών: 120
Μέση βαθμολογία: 40
Στο παραπάνω παράδειγμα, έχουμε τρεις κατηγορίες, δηλαδή σελιδοδείκτες, σελιδοδείκτες και αποτελέσματα. Η τάξη student_marks διαβάζει το θέμα του μαθητή. Το μάθημα cocurricular_mark διαβάζει τα σημάδια του μαθητή σε διδακτικές δραστηριότητες.
Η τάξη αποτελεσμάτων υπολογίζει το σύνολο_σημείων για τον μαθητή μαζί με τον μέσο όρο βαθμολογιών.
Σε αυτό το μοντέλο, η τάξη αποτελεσμάτων προέρχεται από τα σημάδια μαθητή και τα κοκκλιματικά σημάδια καθώς υπολογίζουμε τα αποτελέσματα από το θέμα καθώς και τα σημάδια διδακτικών δραστηριοτήτων.
Αυτό εμφανίζει πολλαπλές κληρονομίες.
Πρόβλημα με διαμάντια
Το Διαμάντι Πρόβλημα απεικονίζεται παρακάτω:
c ++ βασικές ερωτήσεις συνέντευξης
Εδώ, έχουμε μια παιδική τάξη που κληρονομεί δύο τάξεις Πατέρας και Μητέρα. Αυτές οι δύο τάξεις, με τη σειρά τους, κληρονομούν την κατηγορία Πρόσωπο.
Όπως φαίνεται στο σχήμα, το παιδί Class κληρονομεί τα χαρακτηριστικά του ατόμου της τάξης δύο φορές, δηλαδή μία φορά από τον πατέρα και τη δεύτερη φορά από τη μητέρα. Αυτό δημιουργεί ασάφεια καθώς ο μεταγλωττιστής δεν καταλαβαίνει ποιος τρόπος να πάει.
Δεδομένου ότι αυτό το σενάριο προκύπτει όταν έχουμε κληρονομιά σε σχήμα διαμαντιού, αυτό το πρόβλημα λέγεται περίφημα « Το πρόβλημα του διαμαντιού '.
Το πρόβλημα Diamond που υλοποιήθηκε στο C ++ οδηγεί σε σφάλμα ασάφειας κατά τη συλλογή. Μπορούμε να επιλύσουμε αυτό το πρόβλημα κάνοντας την βασική κλάση βάσης ως εικονική. Θα μάθουμε περισσότερα για την «εικονική» λέξη-κλειδί στο επερχόμενο σεμινάριο για τον πολυμορφισμό.
# 3) Πολυεπίπεδη κληρονομικότητα
Η πολυεπίπεδη κληρονομιά παρουσιάζεται παρακάτω.
Στην πολυεπίπεδη κληρονομιά, μια τάξη προέρχεται από μια άλλη παράγωγη τάξη. Αυτή η κληρονομιά μπορεί να έχει όσα επίπεδα αρκεί η εφαρμογή μας να μην προχωρήσει. Στο παραπάνω διάγραμμα, η κλάση Γ προέρχεται από την Κλάση Β. Η κατηγορία Β προέρχεται με τη σειρά της από την τάξη Α.
Ας δούμε ένα παράδειγμα πολυεπίπεδης κληρονομικότητας.
#include #include using namespace std; class Animal { string name=''; public: int tail=1; int legs=4; }; class Dog : public Animal { public: void voiceAction() { cout<<'Barks!!!'; } }; class Puppy:public Dog{ public: void weeping() { cout<<'Weeps!!'; } }; int main() { Puppy puppy; cout<<'Puppy has '< Παραγωγή:
Το κουτάβι έχει 4 πόδια
Το κουτάβι έχει 1 ουρά
Κουτάβια γαβγίου !!! Το κουτάβι κλαίει !!
Εδώ τροποποιήσαμε το παράδειγμα για την ενιαία κληρονομιά έτσι ώστε να υπάρχει ένα νέο κουτάβι τάξης που κληρονομεί από την τάξη Σκύλος που με τη σειρά του κληρονομεί από την τάξη Ζώο. Βλέπουμε ότι η τάξη Puppy αποκτά και χρησιμοποιεί τις ιδιότητες και τις μεθόδους και των δύο τάξεων πάνω από αυτήν.
# 4) Υβριδική κληρονομικότητα
Η υβριδική κληρονομιά απεικονίζεται παρακάτω.
Η υβριδική κληρονομιά είναι συνήθως ένας συνδυασμός περισσότερων από ενός τύπων κληρονομιάς. Στην παραπάνω αναπαράσταση, έχουμε πολλαπλή κληρονομιά (B, C και D) και πολυεπίπεδη κληρονομιά (A, B και D) για να αποκτήσουμε μια υβριδική κληρονομιά.
Ας δούμε ένα παράδειγμα υβριδικής κληρονομικότητας.
#include #include using namespace std; //Hybrid inheritance = multilevel + multilpe class student{ //First base Class int id; string name; public: void getstudent(){ cout <> id >> name; } }; class marks: public student{ //derived from student protected: int marks_math,marks_phy,marks_chem; public: void getmarks(){ cout <>marks_math>>marks_phy>>marks_chem; } }; class sports{ protected: int spmarks; public: void getsports(){ cout <> spmarks; } }; class result : public marks, public sports{//Derived class by multiple inheritance// int total_marks; float avg_marks; public : void display(){ total_marks=marks_math+marks_phy+marks_chem; avg_marks=total_marks/3.0; cout << 'Total marks =' << total_marks << endl; cout << 'Average marks =' << avg_marks << endl; cout << 'Average + Sports marks =' << avg_marks+spmarks; } }; int main(){ result res;//object// res.getstudent(); res.getmarks(); res.getsports(); res.display(); return 0; }
Παραγωγή:
Εισαγάγετε το αναγνωριστικό μαθητή και το όνομα του μαθητή 25 Ved
Πληκτρολογήστε 3 θεματικές ενδείξεις: 89 88 87
Εισαγάγετε αθλητικά σήματα: 40
Σύνολο σημείων = 264
Μέση βαθμολογία = 88
Μέσος όρος + Αθλητικά σήματα = 128
Εδώ έχουμε τέσσερα μαθήματα, δηλαδή μαθητή, βαθμολογίες, αθλητικά και αποτελέσματα. Τα σημάδια προέρχονται από την τάξη των μαθητών. Το αποτέλεσμα της τάξης προέρχεται από Marks and Sports καθώς υπολογίζουμε το αποτέλεσμα από τα θεματικά και τα αθλητικά.
Η έξοδος δημιουργείται δημιουργώντας ένα αντικείμενο αποτελέσματος κλάσης που έχει αποκτήσει τις ιδιότητες και των τριών κλάσεων.
Σημειώστε ότι και στην υβριδική κληρονομιά, η εφαρμογή μπορεί να οδηγήσει σε 'Diamond Problem' το οποίο μπορεί να επιλυθεί χρησιμοποιώντας 'εικονική' λέξη-κλειδί όπως αναφέρθηκε προηγουμένως
# 5) Ιεραρχική κληρονομικότητα
Στην ιεραρχική κληρονομιά, περισσότερες από μία τάξεις κληρονομούν από μία βασική τάξη όπως φαίνεται στην παραπάνω αναπαράσταση. Αυτό του δίνει μια δομή ιεραρχίας.
Παρακάτω δίνεται το Παράδειγμα που δείχνει Ιεραρχική Κληρονομικότητα.
#include using namespace std; //hierarchical inheritance example class Shape // shape class -> base class { public: int x,y; void get_data(int n,int m) { x= n; y = m; } }; class Rectangle : public Shape // inherit Shape class { public: int area_rect() { int area = x*y; return area; } }; class Triangle : public Shape // inherit Shape class { public: int triangle_area() { float area = 0.5*x*y; return area; } }; class Square : public Shape // inherit Shape class { public: int square_area() { float area = 4*x; return area; } }; int main() { Rectangle r; Triangle t; Square s; int length,breadth,base,height,side; //area of a Rectangle std::cout <>length>>breadth; r.get_data(length,breadth); int rect_area = r.area_rect(); std::cout << 'Area of the rectangle = ' <base>>height; t.get_data(base,height); float tri_area = t.triangle_area(); std::cout <<'Area of the triangle = ' << tri_area<side; s.get_data(side,side); int sq_area = s.square_area(); std::cout <<'Area of the square = ' << sq_area< Παραγωγή:
Εισαγάγετε το μήκος και το πλάτος ενός ορθογωνίου: 10 5
Περιοχή του ορθογωνίου = 50
Εισαγάγετε τη βάση και το ύψος του τριγώνου: 4 8
Περιοχή του τριγώνου = 16
Εισαγάγετε το μήκος μιας πλευράς του τετραγώνου: 5
Εμβαδόν της πλατείας = 20
Το παραπάνω παράδειγμα είναι ένα κλασικό παράδειγμα της κατηγορίας Shape. Έχουμε μια βασική κατηγορία Σχήμα και τρεις κατηγορίες, δηλαδή ορθογώνιο, τρίγωνο και τετράγωνο προέρχονται από αυτό.
Έχουμε μια μέθοδο για την ανάγνωση δεδομένων στην κλάση Σχήμα, ενώ κάθε παράγωγη κλάση έχει τη δική της μέθοδο για τον υπολογισμό της περιοχής. Στην κύρια συνάρτηση, διαβάζουμε δεδομένα για κάθε αντικείμενο και στη συνέχεια υπολογίζουμε την περιοχή.
συμπέρασμα
Σε σύγκριση με τις άλλες γλώσσες προγραμματισμού, η γλώσσα C ++ υποστηρίζει όλους τους τύπους κληρονομιάς. Στην πραγματικότητα, μπορούμε να πούμε ότι το C ++ έχει πολύ καλή υποστήριξη για την κληρονομιά. Μπορούμε να μοντελοποιήσουμε τα προβλήματα σε πραγματικό χρόνο πιο αποτελεσματικά χρησιμοποιώντας το C ++.
Σε αυτό το σεμινάριο, έχουμε δει όλους τους τύπους κληρονομιάς που υποστηρίζονται από το C ++.
Διαβάστε επίσης = >> Τύποι κληρονομικότητας στην Ιάβα
Στο επερχόμενο σεμινάριό μας, θα μάθουμε περισσότερα για τη δυνατότητα πολυμορφισμού του OOP.
=> Ελέγξτε την πλήρη σειρά εκπαιδευτικών C ++ ΔΩΡΕΑΝ εδώ.
Συνιστώμενη ανάγνωση
- Κληρονομικότητα σε C ++
- Τύποι δεδομένων C ++
- Τύποι κινδύνων σε έργα λογισμικού
- Τύποι δεδομένων Python
- Καλύτερη δωρεάν σειρά C # Tutorial: Ο απόλυτος οδηγός C # για αρχάριους
- Τύποι βρόχων Unix Shell: Do While Loop, For Loop, μέχρι Loop in Unix
- Διαφορετικοί τύποι αντιστοιχιών που παρέχονται από τον Mockito
- 7 τύποι σφαλμάτων λογισμικού που κάθε δοκιμαστής πρέπει να γνωρίζει