Un objet est la matérialisation concrète d'une classe. C’est un type et donc il faut lui associer des
valeurs et des opérations (attributs - comportements). On rappelle que les éléments constitutifs de la
déclaration d'une classe sont:
• les champs : variables d'instance, i.e. qui seront propres à chaque objet de cette classe;
• les méthodes: les opérations à appliquer aux objets de la classe. En C++, la terminologie
officielle de méthode est "fonction membre". Les méthodes ou fonctions membres sont
définies de façon générique pour toutes les instances d'une classe. Ainsi, appeler une
méthode n'a pas de sens en soi. Mais à l'exécution, une méthode est reliée à une seule
instance de sa classe. Pour appeler la méthode sur une instance de la classe, on précisera
donc toujours l'objet sur lequel la méthode s'exécute.
En "C++", la déclaration d'une méthode consiste à écrire son prototype et sa définition peut être
fournie de façon annexe (dans un autre fichier source). Ainsi, on peut séparer les déclarations et le
code des méthodes. Le fichier.h dont l’extension est .h, contient la description des méthodes qu’on
appelle le prototype de la méthode. Il permet d'annoncer l'existence des fonctions à l'ensemble des
autres fichiers du programme. Le code de la méthode peut être fourni dans le fichier ".cpp". C'est
pourquoi, pour définir la méthode d'une classe, on a une syntaxe particulière permettant de préciser
la classe à laquelle est associée cette méthode. Pour cela, en plus du prototype de la méthode, on
utilise Nom_de_la_classe suivi de "l'opérateur de portée ::" (deux points deux points ou quatre
points). Ainsi sa signature est :
1
Chapitre 3 Classes et objets
• Entre les parenthèses, on trouve la liste des arguments de la méthode. Ce sont les données
avec lesquelles la méthode travaillera.
• Finalement, il y a des accolades qui délimitent le contenu de la fonction. Toutes les
opérations qui seront effectuées se trouvent entre ces deux accolades.
Remarque :
En C++ la définition d’une méthode est syntaxiquement similaire à celle d’une fonction
mais du point de vue sémantique elles sont très différentes
En résumé:
• L'interface rassemble sous le nom de la classe ses attributs et les prototypes de ses
méthodes. Donc pour définir une classe on a trois fichiers. On place en général cette
interface dans un fichier un header (Nom_classe.h).
• La définition de la classe c.à.d. le corps de la classe qui contient le code des méthodes
définies dans l'interface de la classe est placé dans un fichier source (Nom_classe.cpp). En
général le fichier.cpp porte le nom de la classe mais il n'y a aucune obligation. En C++ la
classe peut être dans un fichier qui ne porte pas le nom de la classe. Mais il vaut mieux lui
donner le même nom que la classe.
• Le troisième fichier nommé "main.cpp" contient la fonction "main". Le fichier main.cpp
ne fait qu'utiliser les objets. L'utilisation de la classe nécessite l'import du fichier de
déclaration par " #include fichier.h" pour pouvoir créer des objets de ce type.
Dans l’exemple de la classe "Etudiant", on sait qu'il y a un attribut "Matricule", une méthode
"getMatricule" et une méthode "setMatricule". La déclaration et la définition du concept
élémentaire de "Etudiant" peuvent être: Opérateur de portée pour
désigner la méthode
Etudiant.h Etudiant.cpp
2
Chapitre 3 Classes et objets
Une méthode (ou fonction membre) est la réalisation concrète d’une opération d’un objet. Il existe
quatre types de méthodes :
C’est la méthode la plus simple. Son corps peut contenir n’importe quel traitement.
Sa signature est :
Exemple
Il est à noter que return marque la fin de l’exécution de la fonction: les instructions qui se trouvent
après le return ne sont jamais exécutées. Une fonction peut ne contenir aucun return et donc elle ne
renvoie rien.
Elles concernent la lecture des attributs, c'est-à-dire qu’elles permettent de récupérer la valeur d’un
attribut. La signature est :
3
Chapitre 3 Classes et objets
Dans le cas de la classe voiture, si on veut par exemple lire la couleur d’une voiture, la méthode
s’appellerait "get_couleur" et on peut l’écrire de la façon suivante:
Les setters sont des méthodes qui affectent des paramètres à des attributs. Elles permettent la
modification et l'initialisation des attributs des objets créés par un constructeur. Ces setters sont
généralement précédés du préfixe "set" ("mettre", en anglais). Comme les attributs sont d’accès
private, les méthodes mutateurs permettent de modifier les attributs de façon sécurisée. La
signature est :
Un constructeur est une fonction membre qui porte le même nom que la classe. Elle est appelée
lors de la déclaration d’un objet. Le rôle d'un constructeur est l'instanciation d’une classe (la
création d’un objet).
4
Chapitre 3 Classes et objets
Les constructeurs permettent de définir des comportements particuliers des attributs lors de
l'instanciation d'une classe. Donc le rôle des constructeurs n'est pas seulement de construire les
objets, mais c'est aussi d'initialiser les objets.
Le constructeur par défaut est sans paramètres. Il s’écrit de la façon suivante:
public Nom_Classe ( )
{
...
}
Le constructeur avec paramètres permet de créer et d'initialiser un nouvel objet.
Exemple d’un constructeur avec paramètre pour la classe voiture :
Ce constructeur initialise la couleur et l’année d’un objet de type voiture avec des valeurs passées
en paramètre lors de l’instanciation de la classe.
Le mot clé réservé "this." est un pointeur utilisé pour lever ambiguïté entre les attributs et les
champs d’instance. Il est utile lorsqu’on a besoin de se référer à l’instance de l’objet dans laquelle
on se trouve. "this." est absolument nécessaire lorsque le nom de l’attribut et celui du paramètre de
la méthode sont les mêmes. Comme dans l’exemple ci-dessus : couleur et couleur.
This->couleur fait référence à la variable couleur alors que couleur (après le =) fait référence à la
valeur de l’argument donné en appelant la méthode constructeur.
En résumé
- les constructeurs portent tous le nom de la classe;
- le constructeur n’a pas de type de retour (pas de void et pas de return) ;
- le constructeur est toujours public;
- La méthode constructeur est appelée lors de la déclaration d’un objet.
- la méthode constructeur est obligatoire. Chaque fois qu’on définit une classe d’objet, les
méthodes constructeur sont appelées automatiquement pour construire et initialiser ces
5
Chapitre 3 Classes et objets
objets. Donc le rôle des constructeurs n'est pas seulement de construire les objets, mais c'est
aussi d'initialiser les objets.
- le constructeur sans paramètres est appelé lors de l'instanciation d'un objet sans initialisation.
- Il est fréquent et ordinaire que plusieurs constructeurs soient définis pour une même classe.
C’est ce qu’on appelle la surcharge du constructeur. Ces constructeurs seront différenciés
par le nombre et le type des arguments nécessaires. Chacun d'eux correspond pour
l'utilisateur à la façon de commander/obtenir un objet. Cela permet de créer un objet de
différentes manières.