User Tools

Site Tools


cpp:multiple_inheritance

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
cpp:multiple_inheritance [2017/04/26 12:10] gthanoscpp:multiple_inheritance [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 202: Line 202:
  
 <WRAP center round important 80%> <WRAP center round important 80%>
-Σε αυτό το σημείο θα πρέπει να σημειώσουμε ότι η επιλογή της κληρονομικότητας στη συγκεκριμένη περίπτωση είναι λανθασμένη και έγινε μόνο και μόνο για λόγους παρουσίασης της πολλαπλής κληρονομικότητας. +Σε αυτό το σημείο θα πρέπει να σημειώσουμε ότι η επιλογή της κληρονομικότητας στη συγκεκριμένη περίπτωση **είναι λανθασμένη** και έγινε μόνο και μόνο για λόγους παρουσίασης της πολλαπλής κληρονομικότητας. 
  
-Όπως έχουμε  εξηγήσει και σε προηγούμενες ενότητες το κριτήριο για να χρησιμοποιήσουμε κληρονομικότητα ή όχι είναι εάν ο νέος τύπος που προκύπτει από την κληρονομικότητα διατηρεί όλα τα χαρακτηριστικά του γονικού τύπου. Στο συγκεκριμένο παράδειγμα, το ερώτημα που πρέπει να τεθεί είναι εάν η κλάση //LinkedStack// είναι και //LinkedList//. Η απάντηση είναι αρνητική πράγμα που δείχνει ότι η επιλογή τη κληρονομικότητας είναι λανθασμένη. Σωστότερη επιλογή θα ήταν η κλάση //LinkedList// να είναι πεδίο της κλάσης //LinkedStack//.+Όπως έχουμε  εξηγήσει και σε προηγούμενες ενότητες το κριτήριο για να χρησιμοποιήσουμε κληρονομικότητα ή όχι είναι εάν ο νέος τύπος που προκύπτει από τη σχέση κληρονομικότητα διατηρεί όλα τα χαρακτηριστικά του γονικού τύπου. Στο συγκεκριμένο παράδειγμα, το ερώτημα που πρέπει να τεθεί είναι εάν η κλάση //LinkedStack// είναι και //LinkedList//. Η απάντηση είναι αρνητικήπράγμα που οδηγεί στο συμπέρασμα ότι η επιλογή τη κληρονομικότητας είναι λανθασμένη. Σωστότερη επιλογή θα ήταν η κλάση //LinkedList// να αποτελεί πεδίο της κλάσης //LinkedStack//.
  
-Προκειμένου να αποφύγουμε το παραπάνω λάθος, μπορούμε να ορίσουμε τη σχέση κληρονομικότητας της κλάσης //LinkedStack// σε σχέση με την κλάση //LinkedList// ως //private//. Σε αυτή την περίπτωση τα //public// και //protected// μέλη της κλάσης //LinkedList// γίνονται //private// στην κλάση //LinkedStack//. Έτσι οι κλάσεις ή οι συναρτήσεις που χρησιμοποιούν τη //LinkedStack// είναι αδύνατο να γνωρίζουν ότι η συγκεκριμένη κλάση είναι απόγονος της //LinkedList//. Επίσης είναι αδύνατο να χρησιμοποιήσουν κάποια από τις μεθόδους της //LinkedList// μέσω της //LinkedStack//. Εάν η σχέση κληρονομικότητας είχε οριστεί //public//, τότε οι μέθοδοι και οι κλάσεις που χρησιμοποιούν τη //LinkedStack// θα μπορούσαν να γνωρίζουν τη σχέση κληρονομικότητας και να χρησιμοποιήσουν τα //public// μέλη της κλάσης //LinkedStack//.+**Προκειμένου να μην δημοσιοποιήσουμε την παραπάνω λάθος σχέση κληρονομικόητας**, ορίζουμε τη σχέση κληρονομικότητας της κλάσης //LinkedStack// σε σχέση με την κλάση //LinkedList// ως //private//. Σε αυτή την περίπτωση τα //public// και //protected// μέλη της κλάσης //LinkedList// γίνονται //private// στην κλάση //LinkedStack//. Έτσι οι κλάσεις ή οι συναρτήσεις που χρησιμοποιούν τη //LinkedStack// είναι αδύνατο να γνωρίζουν ότι η συγκεκριμένη κλάση είναι απόγονος της //LinkedList//. Επίσης είναι αδύνατο να χρησιμοποιήσουν κάποια από τις μεθόδους της //LinkedList// μέσω της //LinkedStack// 
 + 
 +Εάν η σχέση κληρονομικότητας είχε οριστεί //__public__//, τότε οι μέθοδοι και οι κλάσεις που χρησιμοποιούν τη //LinkedStack// θα γνωρίζουν τη σχέση κληρονομικότητας και θα μπορούν να χρησιμοποιήσουν τα //public// μέλη της κλάσης //LinkedList//. Επίσης, οι απόγονοι θα μπορούν να χρησιμοποιήσουν τα //public// και //protected// μέλη της κλάσης //LinkedList//
 + 
 +Αντίστοιχα, εάν η σχέση κληρονομικότητας είχε οριστεί //__protected__//, τότε οι απόγονοι της //LinkedStack// θα γνωρίζουν τη σχέση κληρονομικότητας και θα μπορούν να χρησιμοποιήσουν τα //public// και //protected// μέλη της κλάσης //LinkedList//.
 </WRAP> </WRAP>
  
cpp/multiple_inheritance.1493208636.txt.gz · Last modified: 2017/04/26 11:10 (external edit)