Maison >développement back-end >C++ >Comment les spécificateurs d'accès (privés, protégés, publics) affectent-ils l'accessibilité des membres dans l'héritage ?

Comment les spécificateurs d'accès (privés, protégés, publics) affectent-ils l'accessibilité des membres dans l'héritage ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-16 18:11:11123parcourir

How Do Access Specifiers (private, protected, public) Affect Member Accessibility in Inheritance?

Comprendre les spécificateurs d'accès dans l'héritage

L'héritage permet aux classes d'hériter des membres et des fonctionnalités des classes parentes, mais l'accessibilité de ces membres hérités dépend de les spécificateurs d’accès utilisés. Les spécificateurs d'accès private, protected et public contrôlent la façon dont les membres sont accessibles dans les classes héritées.

Héritage privé

  • Les membres privés d'une classe de base restent privés dans la classe dérivée.
  • Les membres protégés et publics de la classe de base deviennent privés dans la classe dérivée.
  • Les membres protégés et publics de la classe de base deviennent privés dans la classe dérivée. classe.
Les classes dérivées perdent la possibilité d'accéder aux membres privés de la classe de base.

Exemple :
class Base {
private:
    int private_member;
};

class Derived : private Base {
public:
    void accessPrivate() {
        // Error: Cannot access 'private_member' because it's private in 'Base'
    }
};

Héritage protégé
  • Les membres publics d'une classe de base deviennent protégés dans la classe dérivée.
  • Les membres protégés de la classe de base restent protégés dans la classe dérivée.
Les classes dérivées peuvent accéder aux membres protégés de la classe de base à la fois directement et via des pointeurs vers la classe de base. objets.

Exemple :
class Base {
protected:
    int protected_member;
};

class Derived : protected Base {
public:
    void accessProtected() {
        protected_member = 100; // Allowed
    }
};

Héritage public
  • Membres publics et protégés une classe de base devient publique dans la classe dérivée.
  • Les membres privés de la classe de base restent private dans la classe dérivée.
Les classes dérivées peuvent accéder à tous les membres publics de la classe de base, directement ou via des pointeurs.

Exemple :
class Base {
public:
    int public_member;
};

class Derived : public Base {
public:
    void accessPublic() {
        public_member = 200; // Allowed
    }
};

Considérations :
  • Accès aux spécificateurs s'applique par classe, pas par objet.
  • Les classes dérivées ne peuvent accéder qu'aux membres de leurs propres objets de classe de base.
Les amis peuvent accéder à tous les membres d'une classe quels que soient les spécificateurs d'accès.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn