Chapitre 3 Classes Et Objets
Chapitre 3 Classes Et Objets
Chapitre 3 Classes Et Objets
Ici, les membres nommés x et y sont privés, tandis que les fonctions membres nommées
initialise, deplace et affiche sont publiques.
#include <iostream>
using namespace std ;
/* ------------ Déclaration de la classe point ------------- */
class point
{ /* déclaration des membres privés */
private :
int x ;
int y ;
/* déclaration des membres publics */
public :
void initialise (int, int) ;
void affiche () ;
};
/* ----- Définition des fonctions membres de la classe point ---- */
void point::initialise (int abs, int ord)
{ x = abs ; y = ord ;
}
void point::affiche ()
{ cout << "Je suis en " << x << " " << y << "\n" ;
}
/* -------- Utilisation de la classe point -------- */
main()
class test1{
private:
int a;
void meth1();
protected:
int b;
void meth2();
public:
char c;
void meth3();
};
class test2 : public test1{
public:
void meth4();
};
//...
test1 x;
test2 y;
Ceci dit si “Point_H” n'est pas défini, alors définissez-le. Par conséquent, les tentatives
ultérieures de lecture de cette classe entraînent l’omission de la définition car Point_H est
déjà défini. Si nous ajoutons ceci à notre classe point.h, il sera maintenant compilé et
exécuté.
On peut utiliser n'importe quel nom, mais il est recommandé d'utiliser un nom associé
à la classe.
6. Constructeur et destructeur
Les données membres d'une classe ne peuvent pas être initialisées durant leur
définition. Il faut donc prévoir une méthode d'initialisation de celles-ci.
De même, après avoir fini d'utiliser un objet, il est bon de prévoir une méthode
permettant de détruire l'objet (libération de la mémoire dynamique ...).
Le constructeur est une fonction membre spécifique de la classe qui est appelée
implicitement à l'instanciation de l'objet, assurant ainsi une initialisation correcte de
l'objet. Le constructeur est une fonction qui porte comme nom, le nom de la classe et qui
ne retourne pas de valeur (pas même un void).
De la même façon que pour le constructeur, le destructeur est une fonction membre
spécifique de la classe qui est appelée implicitement à la destruction de l'objet.
On appelle constructeur par défaut un constructeur n'ayant pas de paramètres ou ayant
des valeurs par défaut pour tous les paramètres.
Le destructeur est une fonction: • qui porte comme nom, le nom de la classe précédé
du caractère ~ (tilde), • qui ne retourne pas de valeur (pas même un void), • qui n'accepte
aucun paramètre (le destructeur ne peut donc pas être surchargé).
class personne {
private:
int age;
public:
personne (int); //constructeur
~personne(); //destructeur
};
personne::personne(int a) { //constructeur
age=a;
}
personne:: ~personne() { //destructeur
}
class point {
int x, y ;
};
8. Classes et pointeurs
En C++, il existe deux façons de créer des objets, c'est-à-dire d'instancier une classe :
de façon statique
de façon dynamique
La création statique
La création statique d'objets consiste à créer un objet en lui affectant un nom, de la même
façon qu'avec une variable :
Nom_de_la_classe Nom_de_l_objet ;
Ainsi, l'objet est accessible grâce à son nom.
La création dynamique
La création dynamique d'objet est une création d'objet par le programme lui-même en
fonction de ses « besoins » en objets. Les objets ainsi créés ne peuvent pas avoir de nom
permettant de les manipuler facilement, les objets créés dynamiquement sont donc repérés
par des pointeurs.
La création d'objet dynamique se fait donc par la procédure suivante :
définition d'un pointeur vers une classe donnée (celle dont va être instancié l'objet
créé dynamiquement).
création de l'objet « dynamique » grâce au mot clé new, renvoyant l'adresse de
l'objet nouvellement créé.
affecter cette adresse au pointeur.
Voici donc ce à quoi peut ressemblé une création d'objet dynamique en C++ :
Nom_de_la_classe * Nom_du_pointeur;
Point * p ;
p = new Point ;
delete p;
Tout objet créé dynamiquement, c'est-à-dire avec le mot-clé new devra impérativement
être détruit à la fin de son utilisation grâce au mot clé delete. Dans le cas contraire, une
partie de la mémoire (celle utilisée par les objets créés dynamiquement) ne sera pas
libérée à la fin de l'exécution du programme.
Les objets créés de façon statique n'ont pas besoin d'être détruits, ils sont
automatiquement supprimés lorsque le programme ne fonctionne plus dans la portée
dans laquelle ils ont été définis.
Le mot clé delete s'utilise en le faisant succéder du pointeur vers l'objet à supprimer. Suite
à la suppression d'un objet, la mémoire qu'il occupait est libérée. Il faut alors affecter la
valeur NULL à son pointeur.
Accéder aux données membres d'un objet
L'accès aux données membres d'un objet se fait différemment selon que l'objet a été créé
de façon statique ou dynamiquement :
Pour les objets créés statiquement, l'accès aux données membres se fait grâce au
nom de l'objet, suivi d'un point (.), puis du nom de la donnée membre. Par
exemple :
Nom_de_l_objet.Nom_de_la_donnee_membre = Valeur;
Pour les objets créés dynamiquement, l'accès aux données membres se fait grâce
au nom du pointeur vers l'objet, suivi d'une flèche point (->) représentée par un
moins (-) et un signe supérieur (>), puis du nom de la donnée membre. Par
exemple :
Nom_du_pointeur->Nom_de_la_donnee_membre = Valeur;
p->x=a ;
Accéder aux fonctions membres d'un objet
L'accès aux fonctions membres d'un objet se fait comme pour l'accès aux données
membres, c'est-à-dire par un point ou une flèche selon la création de l'objet. La fonction
membre est suivie de parenthèses, contenant les paramètres, s'il y en a. L'accès à une
fonction membre se fait donc de la façon suivante :
En statique :
Nom_de_l_objet.Nom_de_la_fonction_membre(parametre1,parametre2,...);
En dynamique :
Nom_du_pointeur->Nom_de_la_fonction_membre(parametre1,parametre2,...);
p-> initialise(5, 2)
Le pointeur courant this
Le mot clé this permet de désigner l'objet dans lequel on se trouve, c'est-à-dire que lorsque
l'on désire faire référence dans une fonction membre à l'objet dans lequel elle se trouve, on
utilise this.
L'objet courant this est en réalité une variable système qui permet de désigner l'objet
courant. Cette variable est passée en tant que paramètre caché de chaque fonction
membre.
Ainsi, lorsque l'on désire accéder à une donnée membre d'un objet à partir d'une fonction
membre du même objet, il suffit de faire précéder le nom de la donnée membre par this->.
Par exemple :
class personne {
private:
int age;
float taille;
public:
personne (int, float); //constructeur
~personne(); //destructeur
};
personne::personne(int age, float taille) {
this->age=age;
this->taille=taille;
}
personne:: ~personne() { //destructeur
}