C++ Pointeur vers une classe
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
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
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
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
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: 102autres extensions