Chargement...

Introduction aux classes en C++

Apprenez les bases des classes en C++, y compris la définition des classes, les objets et la programmation orientée objet.

Le concept fondamental de la programmation orientée objet (POO) est la classe. En C++, les classes regroupent les données (propriétés) et les comportements associés (méthodes) au sein d’une même structure. Dans cet article, nous allons apprendre à définir une classe, à créer des objets, à accéder à leurs membres et à établir des relations entre plusieurs classes.


1. Qu’est-ce qu’une classe ?

Une classe est un modèle abstrait d’un concept ou d’une entité. On peut la considérer comme la représentation, dans le programme, d’un objet du monde réel. Par exemple, un objet « Livre » peut avoir des propriétés comme l’auteur, l’éditeur et le nombre de pages.

En C++, une classe est définie comme ceci :


class NomDeClasse {
public:
    // Propriétés (attributs)
    // Méthodes (fonctions membres)
};

2. La classe Book : un exemple simple

Dans l’exemple ci-dessous, une classe Book est définie. Cette classe contient les propriétés et comportements de base d’un livre.


#include <iostream>
#include <string>
using namespace std;

class Book {
private:
    string title;
    string author;
    int pageCount;
    double price;
    bool available;

public:
    // Constructeur
    Book(string t, string a, int p, double pr, bool av)
        : title(t), author(a), pageCount(p), price(pr), available(av) {}

    // Méthodes Getter et Setter
    string GetTitle() const { return title; }
    void SetTitle(string t) { title = t; }

    string GetAuthor() const { return author; }
    void SetAuthor(string a) { author = a; }

    int GetPageCount() const { return pageCount; }

    void DisplayInfo() const {
        cout << "Livre : " << title << endl;
        cout << "Auteur : " << author << endl;
        cout << "Pages : " << pageCount << endl;
        cout << "Prix : " << price << " €" << endl;
        cout << (available ? "En stock" : "Rupture de stock") << endl;
    }
};

Les membres private ne sont accessibles qu’à l’intérieur de la classe. Ce principe est appelé encapsulation. Les méthodes public peuvent être appelées depuis l’extérieur de la classe.


3. Utilisation de la classe Book

Une fois définie, la classe peut être utilisée comme un type de donnée. On peut créer des objets de type Book et appeler leurs méthodes.


int main() {
    Book b1("Programmation C++", "Bjarne Stroustrup", 1350, 240.0, true);

    b1.DisplayInfo();

    b1.SetTitle("Programmation C++ Moderne");
    cout << "\nNouveau titre : " << b1.GetTitle() << endl;

    return 0;
}

Sortie :


Livre : Programmation C++
Auteur : Bjarne Stroustrup
Pages : 1350
Prix : 240 €
En stock

Nouveau titre : Programmation C++ Moderne

4. Classes associées : Author et Publisher

Dans la réalité, un livre n’a pas seulement un titre ; il possède aussi un auteur et un éditeur. Dans ce cas, on peut utiliser d’autres classes à l’intérieur de la classe Book grâce à la composition.


class Author {
private:
    string name;
    string country;

public:
    Author(string n, string c) : name(n), country(c) {}
    string GetInfo() const { return name + " (" + country + ")"; }
};

class Publisher {
private:
    string name;
    string city;

public:
    Publisher(string n, string c) : name(n), city(c) {}
    string GetInfo() const { return name + " - " + city; }
};

class Book {
private:
    string title;
    Author author;
    Publisher publisher;
    int pageCount;

public:
    Book(string t, Author a, Publisher p, int pages)
        : title(t), author(a), publisher(p), pageCount(pages) {}

    void DisplayInfo() const {
        cout << "Livre : " << title << endl;
        cout << "Auteur : " << author.GetInfo() << endl;
        cout << "Éditeur : " << publisher.GetInfo() << endl;
        cout << "Nombre de pages : " << pageCount << endl;
    }
};

Ici, la classe Book contient des instances des classes Author et Publisher. Autrement dit : « Un livre a un auteur et un éditeur » — une relation de type has-a.


5. Exemple pratique : Système d’informations sur les livres

L’exemple suivant montre comment ces trois classes peuvent être utilisées ensemble.


#include <iostream>
#include <string>
using namespace std;

class Author {
private:
    string name;
    string country;

public:
    Author(string n, string c) : name(n), country(c) {}
    string GetName() const { return name; }
    string GetCountry() const { return country; }
};

class Publisher {
private:
    string name;
    int foundedYear;

public:
    Publisher(string n, int year) : name(n), foundedYear(year) {}
    string GetInfo() const {
        return name + " (" + to_string(foundedYear) + ")";
    }
};

class Book {
private:
    string title;
    Author author;
    Publisher publisher;
    int pageCount;
    double price;

public:
    Book(string t, Author a, Publisher p, int pages, double pr)
        : title(t), author(a), publisher(p), pageCount(pages), price(pr) {}

    void DisplayInfo() const {
        cout << "=== Informations sur le livre ===" << endl;
        cout << "Titre : " << title << endl;
        cout << "Auteur : " << author.GetName()
             << " (" << author.GetCountry() << ")" << endl;
        cout << "Éditeur : " << publisher.GetInfo() << endl;
        cout << "Pages : " << pageCount << endl;
        cout << "Prix : " << price << " €" << endl;
    }
};

int main() {
    Author a("George Orwell", "Royaume-Uni");
    Publisher p("Penguin Books", 1935);
    Book b("1984", a, p, 328, 89.90);

    b.DisplayInfo();
    return 0;
}

Sortie :


=== Informations sur le livre ===
Titre : 1984
Auteur : George Orwell (Royaume-Uni)
Éditeur : Penguin Books (1935)
Pages : 328
Prix : 89.9 €

Cette structure illustre le principe de composition d’objets, où un objet (Book) peut contenir d’autres objets (Author, Publisher). Dans les applications réelles, ce type de classes est souvent utilisé comme modèles de base de données ou structures de données API.


6. TL;DR

  • Les classes regroupent les données (propriétés) et les comportements (méthodes).
  • Les membres private sont accessibles uniquement à l’intérieur de la classe (encapsulation).
  • Les méthodes public permettent un accès contrôlé depuis l’extérieur (getters/setters).
  • Dans l’exemple Book, Author et Publisher, une relation « a un » (has-a) est utilisée.
  • Le constructeur sert à initialiser les propriétés lors de la création d’un objet.
  • Tous les exemples peuvent être exécutés avec Visual Studio 2022 ou GCC 11+.

Articles connexes