Accueil Cours Aprés BTS Livre d'or Contact

Cours de C++


Introduction


Les possibilités de P.O.O. de C++. Celles-ci reposent entièrement sur le concept de classe.
Une classe est la généralisation de la notion de type défini par l'utilisateur1, dans lequel se trouvent associées à la fois des données (membres données) et des méthodes (fonctions membres). En P.O.O. "pure", les données sont encapsulées et leur accès ne peut se faire que par le biais des méthodes.
On peu considérer une structure (struc en C) comme une classe dans laquelle aucune donnée n'est encapsulée.

exemple a tester
#include <iostream.h>
/* ------------ Déclaration du type point ------------- */
struct point
{ /* déclaration "classique" des données */
int x ;
int y ;
/* déclaration des fonctions membres (méthodes) */
void initialise (int, int) ;
void deplace (int, int) ;
void affiche () ;
};
/* ----Définition des fonctions membres du type point ---- */
void point::initialise (int abs, int ord)
{x = abs ; y = ord ;
}
void point::deplace (int dx, int dy)
{
x += dx ; y += dy ;
}
void point::affiche ()
{
cout << "Je suis en " << x << " " << y << "\n" ;
}
main()
{
point a, b ;
a.initialise (5, 2) ; a.affiche () ;
a.deplace (-2, 4) ; a.affiche () ;
b.initialise (1,-1) ; b.affiche () ;
}

Définition des fonctions membres

- Le symbole :: correspond à ce que l'on nomme l'opérateur de "résolution de portée",lequel sert à modifier la portée d’un identificateur. Ici, il signifie que l'identificateur initialise concerné est celui défini dans point.
- En jargon P.O.O., on dit également que a.initialise (5, 2) constitue l'envoi d'un message (initialise, accompagné des informations 5 et 2) à l'objet a.

Notion d'objet et classe

La déclaration d'une classe est voisine de celle d'une structure. En effet, il suffit :
• De remplacer le mot clé struct par le mot clé class,
• De préciser quels sont les membres publics (fonctions ou données) et les membres privés en utilisant les mots clés public et private.
/* ------------ Déclaration de la classe point ------------- */
class point
{ /* déclaration des membres privés */
private:/* facultatif car par défaut en c++ les membres sont privés */
int x ;
int y ;
/* déclaration des membres publics */
public :
void initialise (int, int) ;
void deplace (int, int) ;
void affiche () ;
} ;

La classe point et formée de deux attributs privés à savoir x et y et trois méthodes publiques initialise(),deplace() et affiche()
La définition des fonctions membres et le programme main() seront les mêmes.

Dans main() on 'a point a,b; on dit que a et b sont des instances de la classe point, ou encore que ce sont des objets de type point
On peut écrire a.x=5 dans main() dans le cas de point est une struct alors que dans main() dans le cas de la classe point a.x = 5 entraîne une erreur car x et y sont privés .
? - Les méthodes peuvent être aussi privées et dans ce cas on ne peut pas appeler une méthode privée dans main()
?? - Tester de rendre la méthode déplace privée dans l'exemple de point
? - Les mots clés public et private peuvent apparaître à plusieurs reprises dans la définition d'une classe, comme dans cet exemple :

class X
{ private :
...
public :
...
private :
...
} ;

le fait de rendre publiques tous les membres d'une classe celle-ci sera équivalente à une struct
Affectation d’objets
En C il est possible d'affecter une structure à une autre
struct point
{
int x ;
int y ;
} ;
struct point a, b ;

Il est possible d'écrire a=b; ceci est possible aussi pour les objets d'une même classe comme si on avait écrit a.x=b.x; et a.y=b.y; mais on ne peut ecrire
a.x=b.x; et a.y=b.y; dans main() car x et y sont privés alors que a=b oui !
On peut dire que cela provoquera la recopie des valeurs des membres x et y de b dans les membres correspondants de a. qu'ils soient publiques ou privés.
Le rôle de l'opérateur = (est de recopier des membres données) que pour des cas simples. Mais insuffisante, dans le cas d'un objet qui comportera des pointeurs sur des emplacements dynamiques : la recopie en question ne concernera pas cette partie dynamique où il faut surcharger l'opérateur "="

page suivante décrit la notion d'un constructeur et desctructeur

suivant>>