Bases du c++

Décembre 2016

Bases du C++

Comme son nom l'indique, l'élément fondamental de la programmation orientée objet est l'objet. Vous allez l'utiliser pour stocker toutes les informations requises dans un programme. Vous regrouperez les objets par classe en fonction de la nature des informations à stocker (nombre, chaîne de caractères, matrice, etc.).

La classe C++ correspond au type en langage C et nous pouvons comparer un objet à une variable. Par exemple, l'instruction int x; est la déclaration de la variable x de type int en C, et la déclaration de l'objet x appartenant à la classe int en C++.

Les classes de base suivantes du C++ existent déjà en C :
  • int pour les entiers ;
  • float pour les réels (ou nombres en virgule flottante) ;
  • double pour les réels avec double précision ;
  • char pour les caractères.


Les booléens sont spécifiques au C++ :
  • bool pour représenter le résultat des opérations logiques.


Il existe bien sûr de nombreuses autres classes plus élaborées, comme celles des complexes ou des vecteurs, mais, pour les utiliser, il faut inclure le fichier en-tête approprié au début du fichier source.

La notion de classe est fondamentale en C++. Comme nous l'avons expliqué précédemment, nous allons créer une classe ou utiliser une classe existante pour chaque élément reconnu du problème à traiter. Pour résoudre un problème simple, les nombres entiers et les variables texte sont suffisants, mais lorsque les choses se compliquent, le recours aux représentations d'objets est indispensable. Le code obtenu est mieux structuré et plus facile à lire qu'avec la programmation traditionnelle. Les classes créées par l'utilisateur ne sont rien de plus que de nouveaux types de données bien adaptés au problème à résoudre.

Déclaration d'une classe "classe:syntaxe:de la déclaration"

Pour déclarer une classe, saisissez le mot clé class suivi du nom de cette dernière, puis une accolade ouvrante suivie de la liste des données membres et des méthodes. Terminez avec une accolade de fermeture et un point-virgule.


class Animal // déclaration de la classe Animal
{
public:
// les données membres
char * nom; //une chaîne de caractères
unsigned int age; //un entier non signé
char * couleur; //une autre chaîne de caractères
unsigned int poids; //un autre entier non signé

// les méthodes (les fonctions associées à chaque animal)
Manger();
Dormir();
}; //ne pas oublier le point virgule
Le mot clé public est expliqué un peu plus loin.

Définition d'un objet "objet:syntaxe de la déclaration"

Un objet est aussi facile à déclarer qu'une variable d'un type intégré :

int variable; // définition d'un entier
char caractere; // définition d'un caractère
Gorille joe; // définition d'un objet de type Gorille
Gorille rita; // définition d'un objet de type Gorille

Les deux dernières définitions concernent les objets joe et rita de la figure 1.1.

Accès aux membres d'une classe "classe:syntaxe:accès aux membres" "membre de classe:syntaxe de l'accès"

Une fois que l'objet est défini, vous accédez à ses membres via l'opérateur point (.). Pour affecter une valeur aux données age et poids de l'objet joe, par exemple, vous allez coder :
joe.age = 2;
joe.poids = 10;

Les objets sont des instances particulières de classe, il ne faut pas les confondre avec les classes elles-mêmes. Vous ne pouvez affecter de valeurs qu'aux données membres d'un objet. Vous ne devez pas coder :
Gorille.age = 2; // erreur
De toute façon, cela n'a aucun sens. C'est comme si vous désigniez un groupe de gorilles et que vous disiez : « Le gorille a 2 ans. » Duquel s'agit-il ?



Vous avez certainement remarqué que age et poids étaient des membres de la classe Animal et non de la classe Gorille (voir fig. 1.3). Nous avons pu les associer à nos deux objets joe et rita parce que Gorille hérite de tous les membres de sa classe mère Animal.

L'utilisation d'une méthode de classe est tout aussi simple :
joe.manger() "public" "private" "protected" ;

public, private ou protected

Vous pouvez empêcher l'accès à certaines données membres ou méthodes pour toute fonction autre que celles de la classe.
  • public. Les membres déclarés avec le mot clé public peuvent être utilisés par n'importe quel objet de la classe (comme dans les exemples précédents).
  • private. Par défaut, tous les membres et méthodes d'une classe sont privés. Leur accès est autorisé uniquement pour les fonctions de la classe. Vous devez donc créer des fonctions publiques dans la classe appelées méthodes d'accès pour consulter ou modifier ces membres.
  • protected. L'accès est autorisé uniquement pour les fonctions de la classe et de ses descendantes. Le mot clé protected n'est utilisé que dans le cadre de l'héritage des classes.


En règle générale, il est préférable de laisser les membres de classe privés. Cela permet en effet de dissocier le stockage des données de leur utilisation. Imaginons par exemple qu'une fonction de votre code accède directement à l'élément age parce qu'elle a besoin de connaître l'âge d'un animal. Si vous décidez de changer le mode de stockage des données, vous devrez aussi modifier cette fonction afin qu'elle prenne en compte la nouvelle configuration.

Si vous créez au contraire un jeu de méthodes d'accès en protégeant les données membres, vous avez l'assurance que l'accès s'effectue toujours via cette « interface utilisateur ». Si vous décidez ensuite de modifier le mode de stockage des données, il suffira de modifier aussi les méthodes d'accès publiques. Le reste du code reste inchangé et la modification est transparente pour les utilisateurs de la classe.

Voici quelques exemples de méthodes d'accès :
class Animal // la classe Animal
{
public: //Méthodes d'accès publiques
unsigned int LireAge();
void DefinirAge(unsigned int age);

// autres méthodes d'accès pour les autres données membres...

// Fonctions membres publiques
Dormir();
Manger();

private:
char * nom; // données membres privées
unsigned int age;
char * couleur;
unsigned int poids;
}

Le choix public ou privé reste actif tant que vous n'avez pas codé l'autre mot clé.

Les déclarations de classes ne contiennent que la déclaration (le prototype) de leurs méthodes. Nous étudierons leur mise en oeuvre au travers d'exemples présentés au chapitre 4.

Le texte original de cette fiche pratique est extrait de
«Tout sur le C++» (Christine EBERHARDT, Collection
CommentCaMarche.net, Dunod, 2009)

A voir également :

Ce document intitulé «  Bases du c++  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.