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

Comment les spécificateurs d'accès affectent-ils l'accessibilité des membres dans l'héritage C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-26 03:27:08475parcourir

How Do Access Specifiers Affect Member Accessibility in C   Inheritance?

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

Dans la programmation orientée objet, les spécificateurs d'accès sont des mots-clés qui contrôlent l'accessibilité des membres de la classe. Lors de l'héritage d'une classe de base, l'accessibilité de ses membres dans la classe dérivée dépend des spécificateurs d'accès utilisés lors de l'héritage.

Types d'héritage

C prend en charge trois types d'héritage :

  • Héritage public :Les membres publics de la classe de base deviennent des membres publics de la classe dérivée. Les membres protégés deviennent protégés dans la classe dérivée.
  • Héritage protégé : Les membres publics de la classe de base deviennent des membres protégés de la classe dérivée. Les membres protégés deviennent protégés dans la classe dérivée.
  • Héritage privé :Les membres publics et protégés de la classe de base deviennent des membres privés de la classe dérivée.

Règles d'accès des membres

Voici comment le niveau d'accès des membres change lors de l'héritage en fonction du spécificateur d'accès utilisé :

Héritage public et protégé :

  • Les membres publics de la classe de base restent publics ou protégés dans la classe dérivée.
  • Protégé les membres de la classe de base restent protégés dans la classe dérivée.

Private Héritage :

  • Les membres publics et protégés de la classe de base perdent leurs spécificateurs d'accès et deviennent privés dans la classe dérivée.

Exemple :

class Base {
public:
    int public_member;
protected:
    int protected_member;
    int private_member; // private members are not inherited
};

class Derived1 : public Base {
public:
    void access_member() {
        // Access rules:
        public_member = 10; // allowed
        protected_member = 20; // allowed
        // private_member = 30; // not accessible
    }
};

class Derived2 : protected Base {
public:
    void access_member() {
        // Access rules:
        public_member = 10; // allowed
        protected_member = 20; // allowed
        // private_member = 30; // not accessible
    }
};

class Derived3 : private Base {
public:
    void access_member() {
        // Access rules:
        public_member = 10; // not accessible
        protected_member = 20; // not accessible
        // private_member = 30; // not accessible
    }
};

Meilleures pratiques pour Héritage

Lors du choix d'un spécificateur d'accès pour l'héritage, tenez compte des directives suivantes :

  • Par défaut, privé, sauf nécessité contraire : Private protège l'implémentation interne de la classe.
  • Utiliser protected pour exposer les fonctionnalités aux dérivés classes.
  • Utilisez public avec parcimonie car il permet l'accès aux membres extérieurs à la hiérarchie des classes.
  • Évitez l'héritage public de membres privés ou protégés : Cela rompt l'encapsulation et peut conduire à un comportement inattendu.

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