Vous êtes sur la page 1sur 10

Tutoriel sur le C++ : partie 1 Par Niri Andria dans Gasy Pro & Amateur de l'informatique Modifier le document

t Ce tutoriel a pour but de vous initier brivement au C++. Dans cette partie, nous verrons : - une introduction au C++ - ce qu'est la compilation - la structure d'un code source - les diffrents types de variables - les oprateurs - les structures de contrle - le concept de "fonction", et des notions telles que la surcharge de fonction - le fonctionnement des pointeurs, rfrences et autres joyeusets.

I. Introduction au C++

Basiquement, un ordinateur ne parle qu'un seul "langage" : le binaire. Les tous premiers programmes taient donc directement cods en binaire (et en faisant des tro us dans des feuilles, imaginez le pied). Puis, l'assembleur est apparu : il s'agissait de mettre une couche plus comprhens ible entre le programmeur et l'ordinateur (parce que des 0 et des 1, a lasse vite :P). Puis vinrent des langages de plus en plus haut niveau (on qualifie un lang age de "haut niveau" quand il se rapproche d'une syntaxe claire, proche de l'ang lais) : le BASIC, le Fortran ... En 1972, fut cr le C, qui devint rapidement un de s langages les plus utiliss. Puis, en 1982, pour pallier les manques du C, et y apporter l'approche objet (qu e vous dcouvrirez dans la Partie 2, faut pas pousser non plus :P), Bjarne Stroust rup inventa le C++. Ce dernier langage englobe le C, qui en est un sous-ensemble : tout ce qui est valide en C (ou presque) l'est aussi en C++ : c'est ce que si gnifie le "++" (oprateur d'incrmentation). Le C++ allie les avantages du C (flexibilit, puissance, possiblit de coder "prs du hardware") d'autres, non ngligeables : approche objet, ensemble de librairies sta ndard facilitant la programmation (la fameuse STL), rusabilit du code ... Bref, le C++, c'est Bien(tm) :-D

II. La compilation

Evidemment, l'ordinateur ne sait pas comment utiliser le code souurce lui-mme, qu i n'est aprs tout qu'un fichier texte. Pour le rendre comprhensible, il faut le tr ansformer en Truc Binaire (les .exe sous Windows(c)), afin qu'il puisse tre excut.

Un logiciel spcial se charge de cette "traduction C++ -> binaire" : il s'agit du compilateur. Le plus clbre compilateur C++ est sans conteste G++ (une surcouche GC C), actuellement en version 4.6.2. Si vous tes sous Windows(c), vous pouvez utiliser codeblocks (ou dev-c++), qui in clut une version win32 dudit compilateur.

III. La structure d'un code source

En gnral, on spare le code source d'un projet en plusieurs parties (except quand il est tellement petit que a vaut pas le coup :P) : des fichiers headers (.h ou .hpp ) et des fichiers d'implmentation, les .cpp ; dans les headers, on met la dclarati on des fonctions et des classes, dans les .cpp leur implmentation (dfinition). J'e xpliquerai ces termes barbares un peu plus loin ;-) Le code source d'un programme doit obligatoirement contenir une fonction "int ma in()" (sauf sous les applications Windows(c) graphiques, o c'est "WinMain()") : i l s'agit du point de dpart de l'excution du programme : s'il n'y en avait pas, le programme ne produirait aucun rsultat ... Voici donc la structure d'un petit projet : Fichiers .h ou .hpp : dclaration des fonctions et classes, et des constantes Fichiers .cpp ariables globales : dfinition desdites fonctions et classes, fonction main(), v

En outre, on peut ajouter un code source C++ des instructions, qui ne sont pas re llement du C++, utilises par le compilateur. Il s'agit des "directives du prproces seur", un hritage du C. Par exemple, pour inclure un fichier :

#include <vector> #include "monfichier.h"

Pour dclarer une constante, qu'on peut utiliser ensuite dans le programme : #define PI 3.14159

En fait, le compilateur remplacera les "#include" par le fichier inclure, et il remplacera tous les occurrences de PI par 3.14159 dans le code source. Traditio nnellement, les constantes dfinies avec le prprocesseur sont mises en majuscules.

De plus, un code source, en plus du code lui-mme, peut contenir des commentaires

: il s'agit de texte que le compilateur ignorera, et qui est utilisi pour comment er et expliquer le code et sa fonction. En C++, il existe deux types de commentaires :

- commentaire sur une seule ligne : tout ce qui suit un // est ignor (except si le // est entre parenthses) - commentaire multiligne : tout ce qui suit un /* est ignor, jusqu'au plus proche */ ...

IV. Les diffrents types de variables

Nous voici donc entrs dans le vif du sujet ! Bon, avant de vous lister les types de variables, je vais expliquer ce qu'est une variable. Une variable est un nom, un symbole, associe une valeur qui peut changer au fil d u programme. Il s'agit en fait d'un nom associ un emplacement en mmoire vive, dans lequel le programme peut stocker des donnes. Il s'agit donc d'une sorte de "bote" ;-) Exemple : int mavariable = 2; // dclare une variable contenant un entier, nomme "mavariable", et lui attribue la valeur 2 mavariable = mavariable * 5; mavariable = 17 - mavariable; // "mavariable" contient 10 // maintenant, "mavariable" contient 12

Une variable peut galement tre dclare constante ( ne pas confondre avec les "constant es" dclares avec #define), ce qui la rend impossible modifier dans la suite du pro gramme. Exemple : const float Pi = 3.14159;

Bon, maintenant que c'est fait, les types des variables ! En effet, contrairement , par exemple, PHP, le C++ est (comme le C), un lnagage f ortement typ : une variable contenant un entier ne peut contenir un nombre dcimal, ni une chane de caractres, par exemple. Chaque type de variables utilise en effet un espace diffrent en mmoire vive : un caractre occupera un octet, un entier 4 (su r processeur 32 bits) Les types de base du C++ sont : - bool (boolen) true (1) ou false (0) Occupe en gnral autant d'espace en mmoire que le type "int", mais, sur certains com pilateurs, n'occupe qu'un octet

- char (caractre) 'a', 'b', 'c', '\n' ... en fait, tous les codes ASCII de -128 127 (les caractres sont en effet reprsents par leur code ASCII)

- unsigned char (caractre non sign) La mme chose, mais peut contenir les codes ASCII de 0 255.

- wchar_t (caractre Unicode) La mme chose que pour les char, mais appliqu l'encodage Unicode. Peut contenir les caractres tendus de code Unicode -2147483648 2147483647, et occupe 4 octets.

- unsigned wchar_t (caractre Unicode non sign) Idem, mais pour les caractres Unicode de code 0 4294967295.

- short int (entier court) Peut contenir les entiers de -32768 32767 ; occupe 2 octets en mmoire.

- unsigned short int (entier court non sign) Peut contenir les entiers de 0 65535 ; occupe 2 octets en mmoire (juste pour le f un : 2 octets = 16 bits, et 65535 = 2^16 - 1 . Voil, z'avez tout compris, mainten ant :-))

- int (entier) Sur processeur 16 bits, synonyme de "short int". Sur processeur 32 bits, peut contenir les entiers de -2147483648 2147483647, et occupe 4 octets.

- unsigned int (entier non sign) Sur processeur 16 bits, synonyme de " unsigned short int". Sur processeur 32 bits, peut contenir les entiers de 0, et occupe 4 octets.

- long int (entier long) Equivalent aux "int" des processeurs 32 bits.

- unsigned long int (entier long non sign) Equivalent aux "unsigned int" des processeurs 32 bits.

- float (flottant = nombre rel) Peut contenir les rels de 1.17549e-38 3.40282e+38 (valeur absolue : peut aussi co ntenir des nombres ngatifs) ; occupe 4 octets en mmoire.

- double (flottant double) Peut contenir les rels de 2.22507e-308 1.79769e+308 (valeur absolue : peut aussi contenir des nombres ngatifs); occupe 8 octets en mmoire.

- long double (flottant double long) Peut contenir les rels de 3.3621e-4932 1.18973e+4932 (valeur absolue : peut aussi contenir des nombres ngatifs); occupe 12 octets en mmoire.

Bien sr, ces limites (spcialement pour double, float, int) dpendent de l'implmentati on, et de l'ordinateur sur lequel vous vous trouvez. Si vous voulez vrifier la ta ille et les caractristiques de chaque type de variables sur votre systme, je peux v entuellement vous donner un bout de code l'affichant ;-) (suffit de demander).

NB : si vous hsitez entre double, float et long double, par dfaut, choisissez doub le ;-)

Pour qu'une valeur littrale soit considre comme un type "long", il faut ajouter L d evant. Exemples : 1.4e5L; //entier long L"Ceci est une chane de wchar_t." 12e-12f; //float

Ah, j'oubliais : il existe un autre type fondamental, mais un peu particulier : le void. On ne peut dclarer de variables de type void, mais il peut tre utilis comm e "pointeur d'un peu de tout" (voir plus loin, la section sur les pointeurs) ou pour spcifier qu'une fonction ne renvoie aucune valeur (voir plus loin, la sectio

n sur les fonctions).

Enfin, vous pouvez spcifier vos propres types de donnes : les structures, les clas ses, et les numrations (enum). Les deux premires seront voques dans la Partie II ; qu ant au denrier, j'aime pas a, donc, j'en parlerai pas. Na. :P

Conversions : Un type de donnes peut parfois tre converti en un autre. Pour cela, il existe plusieurs manires de procder : - implicite : char ch = 3; //Attribue "ch" le caractre de code ASCII 3 - C : char ch = (char) 3; //Attribue "ch" le caractre de code ASCII 3 - C++, plus "propre" dans pas mal de cas : char ch = static_cast<char>(3); //Att ribue "ch" le caractre de code ASCII 3 char ch = dynamic_cast<char>(3); //Attribue "ch" le caractre de code ASCII 3 Bien sr, dans cet exemple *trs* simple, la conversion implicite suffit largement ; mais dans des cas plus complexes, si vous avez effectuer une conversion, je vou s recommande de toujours prfrer les "cast" C++ la conversion C. De plus, il existe un troisime type de conversion en C++ : le const_cast<>() (utilis pour convertir une variable constante en non-constante)

V. Les oprateurs

En C++, les oprateurs sont plthore; en voici une liste non exhaustive : - Affectation = int mavariable = 2;

- Oprateurs arithmtiques : + : addition - : soustraction * : multiplication / : division (euclidienne pour les entiers, "normale" pour les flottants) % : modulo (reste)

- Oprateurs binaires : & : AND binaire (par exemple, "2 & 3", c'est "10 & 11" en binaire, et a renvoie "10", soit 2)

: OR binaire (par exemple, "2 "11", soit 3)

3", c'est "10

11" en binaire, et a renvoie

^ : XOR binaire ("ou exclusif") (par exemple, "2 ^ 3", c'est "10 ^ 11" en bina ire, et a renvoie "01", soit 1) ~ : NOT binaire (chaque bit devient son oppos) << : dcalage vers la gauche de n bits (par exemple, "2 << 3", c'est "10 << 3" en binaire, et a renvoie "10000", soit 16) >> : dcalage vers la droite de n bits (par exemple, "2 >> 3", c'est "10 >> 3" en binaire, et a renvoie "00", soit 0)

- Oprateurs logiques : == : renvoie true si les deux oprandes sont gales != : renvoie true si les deux oprandes ne sont pas gales > : renvoie true si l'oprande de gauche est suprieure celle de droite >= : renvoie true si l'oprande de gauche est suprieure ou gale celle de droite <= : renvoie true si l'oprande de gauche est infrieure celle de droite <= : renvoie true si l'oprande de gauche est infrieure ou gale celle de droite && : renvoie true si ses deux oprandes sont "true" : renvoie true si au moins l'une de ses deux oprandes est "true" ! : est true si sont oprande est "false" - Oprateurs composs :

+= : addition et affectation ("a += b" quivaut "a = a + b") -= : soustraction et affectation ("a -= b" quivaut "a = a - b") *= : multiplication et affectation ("a *= b" quivaut "a = a * b") /= : division et affectation ("a /= b" quivaut "a = a / b") %= : modulo (reste) et affectation ("a %= b" quivaut "a = a % b") &= , = , ^= , ~= , <<= , >>= : vous avez pig le truc, non ? :sm6: - Autres oprateurs ?: : oprateur ternaire. Equivaut un "mini-if-else" : (condition) ? code1 : code 2 Exemple : int i = (true) ? 1 : 0; // i vaut 1

i = (false) ? 2 : i*5; // i vaut maintenant 5 (5*1) ++ : incrmentation (augmente la valeur de la variable de 1) ; existe en version prfixe (++i) et postfixe (i++). -- : dcrmmentation (diminue la valeur de la variable de 1) ; existe en version p rfixe (--i) et postfixe (i--).

VI. Les structures de contrle

Bien entendu, le C++ propose son lot de structures de contrles :

- Structures conditionnelles > On retrouve le classique if(condition) ... else ...

Exemple : if(iMaVariable == 512) { //Code } else if(iMaVariable == 1024) { //Code } else { //Code } Si le "code" en question ne fait qu'une ligne, on peut crire : if(iMaVariable == 512) //Code else if(iMaVariable == 1024) //Code else

//Code

> Est galement prsent le switch() comme en PHP pour ceux qui connaissent) char chTest = 'a'; switch(chTest) { case 'a': //Code si chTest == 'a' break; case 'b': //Code si chTest == 'b' break; case 'c': //Code si chTest == 'c' break; default: //Code si aucun des tests prcdents n'tait positif break; }

Attention : il ne faut pas oublier le "break;" dans chaque "case" ! En effet, le code est excut jusqu' ce qu'un "break;" soit trouv ...

char chTest = 'a'; int iCompteur = 0; switch(chTest) { case 'a': iCompteur++; case 'b':

iCompteur++; case 'c': iCompteur++; default: iCompteur++; break; } //iCompteur vaut maintenant ... 4 !