Ποια είναι η διαφορά μεταξύ της κληρονομικότητας "public", "private" και "protected" στη C++; Όλες οι ερωτήσεις που βρήκα στο SO αφορούν συγκεκριμένες περιπτώσεις.
Για να απαντήσω σε αυτό το ερώτημα, θα ήθελα να περιγράψω πρώτα με δικά μου λόγια τους accessors του member. Αν τα γνωρίζετε ήδη αυτά, μεταβείτε στην επικεφαλίδα "next:".
Υπάρχουν τρεις προσπελάσεις που γνωρίζω: public
, protected
και private
.
Let:
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
Base
περιέχει το protectedMember
.Base
δεν γνωρίζει το privateMember
.Με τον όρο "γνωρίζει", εννοώ "αναγνωρίζω την ύπαρξή του, και συνεπώς μπορώ να έχω πρόσβαση".
Το ίδιο συμβαίνει με τη δημόσια, την ιδιωτική και την προστατευμένη κληρονομικότητα. Ας θεωρήσουμε μια κλάση Base
και μια κλάση Child
που κληρονομεί από την Base
.
δημόσια
, όλα όσα γνωρίζουν τις κλάσεις Base
και Child
γνωρίζουν επίσης ότι η κλάση Child
κληρονομεί από την κλάση Base
.προστατευμένη
, μόνο το Child
και τα παιδιά του γνωρίζουν ότι κληρονομούν από το Base
.Child
δεν γνωρίζει την κληρονομικότητα.Έχει να κάνει με τον τρόπο με τον οποίο τα δημόσια μέλη της βασικής κλάσης εκτίθενται από την παράγωγη κλάση.
<ul>,
Πρόκειται ουσιαστικά για την προστασία πρόσβασης των δημόσιων και προστατευόμενων μελών της βασικής κλάσης στην παράγωγη κλάση. Με τη δημόσια κληρονομικότητα, η παράγωγη κλάση μπορεί να δει τα δημόσια και προστατευμένα μέλη της βάσης. Με την ιδιωτική κληρονομικότητα, δεν μπορεί. Με protected, η παράγωγη κλάση και οποιεσδήποτε κλάσεις που προέρχονται από αυτήν μπορούν να τα δουν.