Menu
Coddy logo textTech

Getters et Setters

Fait partie de la section Programmation Orientée Objet du Journey C++ de Coddy — leçon 28 sur 104.

Lorsque les membres d'une classe sont privés, le code externe ne peut pas y accéder directement. Les getters et les setters sont des méthodes publiques qui fournissent un accès contrôlé à ces membres privés - les getters récupèrent les valeurs, les setters les modifient.

class Temperature {
    double celsius;    // Privé - ne peut pas être accédé directement
    
public:
    // Getter - retourne la valeur
    double getCelsius() const {
        return celsius;
    }
    
    // Setter - modifie la valeur avec validation
    void setCelsius(double value) {
        if (value >= -273.15) {    // Vérification du zéro absolu
            celsius = value;
        }
    }
};

Le véritable pouvoir des setters est la validation.

Au lieu de permettre l'assignation de n'importe quelle valeur, vous pouvez imposer des règles. Dans l'exemple ci-dessus, les températures inférieures au zéro absolu sont rejetées. Sans setter, n'importe qui pourrait assigner directement des données invalides.

Les getters peuvent également transformer les données avant de les retourner :

class Temperature {
    double celsius;
public:
    double getCelsius() const { return celsius; }
    
    // Getter calculé - ne stocke pas les fahrenheit, les calcule
    double getFahrenheit() const {
        return celsius * 9.0 / 5.0 + 32.0;
    }
    
    void setCelsius(double value) { celsius = value; }
};

Remarquez le mot-clé const sur les getters - cela indique qu'ils ne modifient pas l'objet. Les setters ne peuvent pas être const puisque leur but est de modifier les valeurs des membres. Ce modèle d'utilisation des getters et des setters est fondamental pour l'encapsulation, vous donnant un contrôle total sur la manière dont les données de votre classe sont consultées et modifiées.

challenge icon

Défi

Facile

Construisons un système de profil de joueur qui démontre comment les getters et setters fournissent un accès contrôlé aux données privées, incluant la validation et les propriétés calculées.

Vous allez créer deux fichiers pour organiser votre code :

  • Player.h : Définissez une classe Player qui gère le profil d'un personnage de jeu avec un accès protégé aux données. Votre classe doit avoir :
    • Membres privés : name (string), level (int), et experience (int)
    • Un constructeur qui prend un nom et initialise level à 1 et experience à 0
    • Un getter getName() qui retourne le nom du joueur
    • Un getter getLevel() qui retourne le niveau actuel
    • Un getter getExperience() qui retourne les points d'expérience actuels
    • Un setter setName() qui n'accepte que des noms d'au moins 3 caractères — si invalide, conservez le nom actuel inchangé
    • Un setter addExperience(int points) qui n'accepte que des valeurs positives. Lorsque l'expérience atteint ou dépasse 100, le joueur monte de niveau : incrémentez le niveau de 1 et soustrayez 100 de l'expérience. Cela peut se produire plusieurs fois si suffisamment d'expérience est ajoutée.
    • Un getter calculé getExperienceToNextLevel() qui retourne combien de points d'expérience supplémentaires sont nécessaires pour atteindre le niveau suivant (toujours 100 - current experience)

    Marquez tous les getters comme const puisqu'ils ne modifient pas l'objet.

  • main.cpp : Démontrez vos getters et setters en action. Lisez un nom de joueur et des points d'expérience à ajouter depuis l'entrée (chacun sur une ligne séparée), puis :
    • Créez un Player avec le nom saisi
    • Affichez "Player: <name>, Level: <level>, XP: <experience>"
    • Ajoutez les points d'expérience saisis en utilisant addExperience()
    • Affichez à nouveau la même ligne de statut pour montrer l'état mis à jour
    • Affichez "XP to next level: <amount>"
    • Essayez de changer le nom en "Al" (devrait échouer à la validation)
    • Affichez "Name after invalid change: <name>"
    • Changez le nom en "Champion" (devrait réussir)
    • Affichez "Name after valid change: <name>"

L'entrée d'expérience sera fournie sous forme de chaîne de caractères que vous devrez convertir en entier. Incluez votre fichier d'en-tête dans main.cpp en utilisant #include "Player.h".

Aide-mémoire

Les getters et setters sont des méthodes publiques qui fournissent un accès contrôlé aux membres privés d'une classe.

Modèle de base de getter et setter :

class Temperature {
    double celsius;    // Membre privé
    
public:
    // Getter - retourne la valeur (marqué const)
    double getCelsius() const {
        return celsius;
    }
    
    // Setter - modifie la valeur
    void setCelsius(double value) {
        celsius = value;
    }
};

Setters avec validation :

void setCelsius(double value) {
    if (value >= -273.15) {    // Valider avant de définir
        celsius = value;
    }
}

Getters calculés :

// Retourne la valeur calculée sans la stocker
double getFahrenheit() const {
    return celsius * 9.0 / 5.0 + 32.0;
}

Points clés :

  • Les getters doivent être marqués const car ils ne modifient pas l'objet
  • Les setters ne peuvent pas être const car ils modifient les valeurs des membres
  • Les setters permettent la validation pour empêcher les données invalides
  • Les getters peuvent transformer ou calculer des valeurs avant de les retourner

Essayez vous-même

#include <iostream>
#include <string>
#include "Player.h"

using namespace std;

int main() {
    // Lire le nom du joueur
    string playerName;
    getline(cin, playerName);

    // Lire les points d'expérience à ajouter (sous forme de chaîne, convertir en int)
    string expString;
    getline(cin, expString);
    int expToAdd = stoi(expString);

    // TODO: Créer un Player avec le nom saisi

    // TODO: Afficher le statut initial : "Player: <name>, Level: <level>, XP: <experience>"

    // TODO: Ajouter les points d'expérience saisis en utilisant addExperience()

    // TODO: Afficher la ligne de statut mise à jour

    // TODO: Afficher "XP to next level: <amount>"

    // TODO: Essayer de changer le nom en "Al" (devrait échouer à la validation)

    // TODO: Afficher "Name after invalid change: <name>"

    // TODO: Changer le nom en "Champion" (devrait réussir)

    // TODO: Afficher "Name after valid change: <name>"

    return 0;
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet