Le langage C est un langage procédural, c'est-à-dire que c'est un langage
permettant de définir des données grâce à des variables, et
des traitements grâce aux fonctions.
L'apport principal du langage C++ par rapport au langage C est l'intégration
du concept objet, afin d'en faire un langage orienté objet (LOO).
Pour comprendre clairement le concept d'objet, reportez-vous à la partie
Programmation orientée objet!
Pour pouvoir manipuler des objets, il est essentiel de définir des classes,
c'est-à-dire définir la structure d'un objet. Cette définition en C++ se fait
de la manière suivante:
class Nom_de_la_classe {
public:
// Instructions permettant de définir la classe;
};
Nom_de_la_classe représente bien évidemment le type d'objet désigné
par la classe ou du moins le nom que vous leur attribuez.
Le mot clé public: permet de définir le niveau de visibilité des
éléments de la classe. Cela correspond au concept d'encapsulation
un des concepts majeurs de la programmation orientée objet.
|
Le point-virgule situé à la fin du bloc de définition de la classe est obligatoire
|
Jusqu'ici notre classe est vide (elle est toutefois syntaxiquement correcte),
c'est-à-dire qu'elle ne contient ni données (appelées données
membres) ni traitements (fonctions appelées fonctions membres).
Les données membres sont des variables stockées au sein d'une classe. Elles
doivent être précédées de leur type et d'une étiquette précisant
leur portée, c'est-à-dire les classes ayant le droit d'y accéder.
Ces étiquettes sont au nombre de trois:
Pour comprendre en détail ces étiquettes, reportez-vous au chapitre sur
l'encapsulation.
Ainsi, une classe comportant trois données membres ressemble par exemple à ceci:
class Voiture {
public:
char Marque[32];
float Vitesse;
int Prix;
};
Les données membres permettent de conserver des informations relatives à
la classe, tandis que les fonctions membres représentent les traitements qu'il est possible
de réaliser avec les objets instanciés de la classe. On parle généralement
de fonctions membres ou méthodes pour désigner ces traitements.
Il existe deux façons de définir des fonctions membres:
- En définissant le prototype et le corps de la fonction à l'intérieur de la classe
en une opération
- En définissant le prototype de la fonction à l'intérieur de la classe
et le corps de la fonction à l'extérieur
C'est cette seconde solution qui est généralement utilisée. Ainsi, puisque l'on
définit la fonction membre à l'extérieur de sa classe, il est nécessaire
de préciser à quelle classe cette dernière fait partie. On utilise pour cela
l'opérateur de résolution de portée (ORP), noté ::.
Il suffit ainsi de faire précéder le nom de la fonction par l'ORP, suivi du nom de la
classe pour lever toute ambiguité (deux classes peuvent avoir des fonctions membres différentes
portant le même nom...).
De la même façon que les données membres, la déclaration des fonctions
membres doit précéder le prototype des fonctions à l'intérieur de
la classe.
Voici donc la syntaxe de définition des fonctions membres:
class Nom_de_la_classe {
private:
// Instructions permettant de définir les données membres de la classe;
public:
// Instructions permettant de définir les fonctions membres de la classe;
type_de_valeur_renvoyée Nom_de_la_fonction(type_du_parametre1,
type_du_parametre2, ..);
};
type_de_valeur_renvoyée Nom_de_la_classe::Nom_de_la_fonction(parametre1,
parametre2,...){
//instructions composant le corps de la fonction
}
Etant donné que l'encapsulation doit permettre la protection des données
membres (qui sont alors précédées de l'étiquette private ou
protected), les fonctions membres doivent pouvoir servir d'interface pour manipuler les
données membres. On place donc l'étiquette publique devant les fonctions membres
dédiées à la manipulation des données membres. Ce système permet
de garantir l'intégrité des données membres. En effet, si l'utilisateur de
la classe ne peut pas modifier les données membres directement, il est obligé d'utiliser
l'interface (les fonctions membres) pour les modifier, ce qui peut permettre au créateur de la classe
d'effectuer des contrôles...
|