Académique Documents
Professionnel Documents
Culture Documents
objets - séance 6 -
ENSA Khouribga
Décembre 2021
Programmation Orientée Objets - Classes
Exemple pratique :
class Matrice
{ public :
void afficher ();
Matrice Additionner ( Matrice &);
void RemplitMat ( ); // Remplissage
Matrice ( int , int ); // Constructeur
~ Matrice ( ); // destructeur
private :
int ligne ;
int colonne ;
int ** tab ;
};
int main ( ){
Matrice M (2 ,2);
Matrice N (2 ,2);
M . RemplitMat ();
N . RemplitMat ();
( M . Additionner ( N )). Afficher ();
}
Remarque :
Il faut noter que les pointeurs ne sont pas pris en considération
dans un cas simple d’affectation : si parmi les attributs, se trouve
un pointeur, l’emplacement pointé ne sera pas recopié
(voir surcharge des opérateurs).
Objets et fonctions
Un objet peut être transmis comme argument à une fonction ; par
valeur, par adresse ou par référence et peut être une valeur de
retour à une fonction ; par valeur, par adresse ou par référence.
Dans les 2 cas, si cette fonction est une méthode de la classe de
l’objet, elle a accès à tous ces attributs privé ou public, sinon elle
n’aura droit d’accès qu’à ces attributs publics.
Remarque :
Si la transmission de l’objet se fait par valeur, il y a recopie de ses
attributs dans un emplacement locale à la fonction, ce qui entraîne
certains problèmes si la classe contient des pointeurs comme
attributs.
Membres statiques
On distingue deux types de membres :
Membres d’instance : membres associés à une instance de la
classe.
Membres de classe : membres associés à la classe et qui ne
dépendent d’aucune instance de la classe.
Les membres de classe, sont aussi dits membres statiques. Ils
sont déclarés avec l’attribut static, et existent même si aucun
objet de la classe n’est crée.
remarque :
L’accès aux membres statiques d’une classe (attributs ou méthodes)
se fait avec l’opérateur de résolution de portée ( : :) précédé par le
nom de la classe ou d’un quelconque objet de la classe.
class Point {
int x ;
int y ;
static int compt ;
public :
Point ( int = 0 , int = 0);
~ Point ();
void affiche ();
static void affiche_nbobj ();
};
Le pointeur this
En C++, tous les objets possèdent un champ privé particulier
nommé this, sans qu’il soit nécessaire de le déclarer. Ce champ
contient l’adresse de l’objet courant.
Dans une fonction membre, this représente un pointeur sur
l’instance ayant appelé cette fonction
this est un pointeur constant, c’est-à-dire qu’on ne peut le
modifier.
class Point {
int x ; int y ;
public :
Point ( int = 0 , int = 0);
void affiche ();
};
Point :: Point ( int x , int y ) { * this . x = x ;
* this . y = y ;}
void Point :: affiche ()
{
cout < < " le ␣ pt :( " << this - >x < < " ," << this - >y < < " ) " ;
cout <<" ␣ est ␣ a ␣ l ’ adresse " << this << endl ;
}
Tableaux d’objets
En théorie, un tableau peut posséder des éléments de
n’importe quel type. Ainsi nous pouvons déclarer un tableau de
N objets d’une classe MaClasse par :
MaClasse tab[N] ;
Or, du fait qu’on ne peu déclarer un objet sans l’initialiser,
cette déclaration ne sera possible que si la classe MaClasse
admet un constructeur sans arguments (ou un constructeur
dont tous les arguments ont des valeurs par défaut).
Ces mêmes remarques s’appliquent pour les tableaux
dynamiques d’objets. Une déclaration de type :
MaClasse * adr = new MaClasse[N] ;
nécessite aussi un constructeur sans arguments.