Spécificateurs d'accès en C++

25 Sep 2019 25 Sep 2019 7129 vues ESSADDOUKI Mostafa 4 min de lecture
Introduction et syntaxe de base
1 Introduction au langage C++ 2 Entrée-sortie en C++ - cin et cout 3 Inférence de type avec le mot-clé auto en C++ 4 Classe std::string et les chaînes de caractères en C++ 5 Les structures conditionnelles (if et switch) en C++ (C++17 et C++20) 6 Les boucles en C++ (C++17 et C++20) 7 La gestion des fichiers en C++
Pointeurs et fonctions
8 Introduction aux pointeurs en C++ - Déclaration et interêts 9 Les références en C++ - déclaration et interêts 10 Les tableaux en C++ - Déclaration et interêts 11 Introduction aux fonctions en C++ 12 Passer des arguments à une fonction en C++ 13 Déclarer un paramètre const en C++ 14 Les fonctions Lambda en C++ 15 Fonctions utiles (Mathématiques et caractères) en C++
Programmation OO
16 Classes et objets en C++ 17 Spécificateurs d'accès en C++ 18 Constructeurs et destructeur d'une classe en C++ 19 Fonctions membres en C++ 20 Membres statiques d'une classe en C++ 21 Fonctions en ligne en C++ - inline 22 Fonctions et classes amies en C++ - friend 23 Surcharge des fonctions en C++ 24 Surcharge des opérateurs en C++ 25 Héritage en C++ 26 La gestion d'exceptions en C++ : déclaration, utilisation et personnalisation 27 fonctions et classes templates en C++ 28 Les nouveautés C++20 pour améliorer les templates en C++
Structures de données
29 Introduction aux structures de données 30 Les structures en C++ et la différence avec les structures en C 31 Les listes chaînées en C++ 32 Les piles en C++ 33 File d'attente en C++ 34 Arbre binaire de recherche : définition et mise en oeuvre en C++
La bibliothèque standard (STL)
35 Introduction à la bibliothèque de Template Standard STL 36 Les itérateurs en C++ - définition, déclaration et exemples 37 La classe array en C++ (bibliothèque STL) <array> 38 La classe vector de la bibliothèque STL <vector> 39 La classe deque en C++ ( Bibliothèque STL) 40 La classe list en C++ (bibliothèque STL) <list> 41 La classe stack (Pile) en C++ (bibliothèque STL) <stack> 42 La classe queue (File d'attente) en C++ (bibliothèque STL) <queue> 43 La file d'attente prioritaire (classe priority_queue) - Bibliothèque STL 44 Les ensembles en C++ (Classe set <set> - Bibliothèque STL) 45 Les dictionnaires en C++ : Classe map (Bibliothèque STL) 46 Introduction aux algorithmes de la bibliothèque STL (programmation compétitive) 47 Tri et méthodes associées en C++ - Bibliothèque STL 48 Recherche dichotomique et méthodes associées en C++ - Bibliothèque STL 49 Appliquer un prédicat ou une fonction aux éléments d'une séquence en C++ - Bibliothèque STL 50 Recherche dans une séquence et méthodes associées en C++ - Bibliothèque STL

Le masquage des données est l'un des principes fondamentaux de la POO. Il consiste à contrôler l'accès aux membres d'une classe grâce aux spécificateurs d'accès : public, private et protected.

Spécificateurs d'accès Les trois mots-clés public, private et protected définissent qui peut accéder à chaque membre d'une classe. Par défaut (sans spécificateur), tous les membres d'une class sont privés.
   
Structure générale C++
class NomClasse {
public:
    // membres accessibles de partout

private:
    // membres accessibles uniquement dans la classe

protected:
    // membres accessibles dans la classe et ses sous-classes
};

Membres public

Les membres déclarés public sont accessibles de partout dans le programme via l'opérateur d'accès .. C'est l'interface visible de la classe.

  Exemple — tous les attributs en public

#include <iostream>
using namespace std;

class Voiture {
public:
    int    Id;
    int    NB_roues;
    double vitesse;
    int    kilometrage;

    void afficher() {
        cout << "Id=" << Id << " Roues=" << NB_roues
             << " Vitesse=" << vitesse
             << " Km=" << kilometrage << endl;
    }
};

int main()
{
    Voiture v1;
    v1.Id = 1;
    v1.NB_roues = 4;
    v1.vitesse = 250;
    v1.kilometrage = 20000;
    v1.afficher();
    return 0;
}
Sortie
Id=1 Roues=4 Vitesse=250 Km=20000
Inconvénient Rendre tous les attributs publics expose les données internes de la classe. N'importe quel code extérieur peut les modifier de manière incontrôlée. C'est pourquoi on préfère généralement les déclarer private.

Membres private

Les membres private sont inaccessibles de l'extérieur de la classe. Seules les fonctions membres de la classe (et les fonctions amies) peuvent y accéder. C'est le mode d'accès par défaut pour les membres d'une class.

La convention recommandée est de placer les données en private et d'y accéder via des méthodes publiques (getters/setters).

  Exemple — données privées, méthodes publiques

#include <iostream>
using namespace std;

class Voiture {
private:
    int    Id;
    int    NB_roues;
    double vitesse;
    int    kilometrage;

public:
    // méthode d'initialisation (remplace l'accès direct)
    void initialiser(int id, int roues, double vit, int kilo) {
        Id = id; NB_roues = roues; vitesse = vit; kilometrage = kilo;
    }
    void afficher() {
        cout << "Id=" << Id << " Roues=" << NB_roues
             << " Vitesse=" << vitesse
             << " Km=" << kilometrage << endl;
    }
};

int main()
{
    Voiture v1;
    v1.initialiser(1, 4, 250, 20000);
    v1.afficher();
    return 0;
}
Sortie
Id=1 Roues=4 Vitesse=250 Km=20000

Membres protected

protected Les membres protected se comportent comme des membres private vis-à-vis de l'extérieur : ils sont inaccessibles en dehors de la classe. Cependant, ils sont accessibles dans les sous-classes (classes dérivées), ce qui les distingue de private.
Usage typique protected est principalement utile en contexte d'héritage : les attributs protégés sont partagés entre la classe parent et ses enfants, sans être exposés publiquement. Ce point sera développé en détail dans le cours sur l'héritage.

Tableau récapitulatif

Accès depuis…publicprotectedprivate
La classe elle-même
Une sous-classe (héritage)
Code extérieur à la classe

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.