C++ Pointeur vers une classe

Classes et objets C++

Un pointeur vers une classe C++ est similaire à un pointeur vers une structure. Pour accéder aux membres d'un pointeur vers une classe, vous devez utiliser l'opérateur d'accès aux membres->, tout comme pour accéder à un pointeur vers une structure. Comme tous les pointeurs, vous devez initialiser le pointeur avant de l'utiliser.

En C++, un pointeur vers une classe pointe vers un objet d'une classe. Comme les pointeurs ordinaires, un pointeur vers une classe peut être utilisé pour accéder aux variables membres et aux fonctions membres de l'objet.

Déclaration et initialisation de pointeurs vers des classes

Exemple

#include <iostream>

class MyClass {
public:
    int data;

    void display() {
        std::cout << "Data: " << data << std::endl;
    }
};

int main() {
    // Créer un objet de classe
    MyClass obj;
    obj.data = 42;

    // Déclarer et initialiser un pointeur vers la classe
    MyClass *ptr = &obj;

    // Accéder aux variables membres via un pointeur
    std::cout << "Données via pointeur : " << ptr->data << std::endl;

    // Appeler une fonction membre via un pointeur
    ptr->display();

    return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

Data via pointer: 42
Data: 42

Allocation dynamique de mémoire

Un pointeur vers une classe peut également être utilisé pour allouer dynamiquement de la mémoire afin de créer un objet de la classe :

Exemple

#include <iostream>

class MyClass {
public:
    int data;

    void display() {
        std::cout << "Data: " << data << std::endl;
    }
};

int main() {
    // Allouer dynamiquement de la mémoire pour créer un objet de la classe
    MyClass *ptr = new MyClass;
    ptr->data = 42;

    // Appeler une fonction membre via un pointeur
    ptr->display();

    // Libérer la mémoire allouée dynamiquement
    delete ptr;

    return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

Data: 42

Pointeurs vers des classes comme paramètres de fonction

Un pointeur vers une classe peut être passé comme paramètre de fonction :

Exemple

#include <iostream>

class MyClass {
public:
    int data;

    void display() {
        std::cout << "Data: " << data << std::endl;
    }
};

// La fonction accepte un pointeur vers la classe comme paramètre
void processObject(MyClass *ptr) {
    ptr->display();
}

int main() {
    MyClass obj;
    obj.data = 42;

    // Passer le pointeur vers la classe à la fonction
    processObject(&obj);

    return 0;
}

Exemple

L'exemple suivant aide à mieux comprendre le concept de pointeurs vers des classes :

Exemple

#include <iostream>
 
using namespace std;

class Box
{
   public:
      // Définition du constructeur
      Box(double l=2.0, double b=2.0, double h=2.0)
      {
         cout <<"Constructeur appelé." << endl;
         longueur = l;
         breadth = b;
         height = h;
      }
      double Volume()
      {
         return length * breadth * height;
      }
   private:
      double length;     // Longueur d'une boîte
      double breadth;    // Largeur d'une boîte
      double height;     // Hauteur d'une boîte
};

int main(void)
{
   Box Box1(3.3, 1.2, 1.5);    // Déclarer box1
   Box Box2(8.5, 6.0, 2.0);    // Déclarer box2
   Box *ptrBox;                // Déclarer un pointeur vers une classe.

   // Enregistrer l'adresse du premier objet
   ptrBox = &Box1;

   // Essayez maintenant d'utiliser l'opérateur d'accès aux membres pour accéder aux membres
   cout << "Volume de Box1: " << ptrBox->Volume() << endl;

   // Enregistrez l'adresse du deuxième objet
   ptrBox = &Box2;

   // Essayez maintenant d'utiliser l'opérateur d'accès aux membres pour accéder aux membres
   cout << "Volume de Box2: " << ptrBox->Volume() << endl;
 
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

Constructor called.
Constructor called.
Volume of Box1: 5.94
Volume of Box2: 102

Classes et objets C++

autres extensions