|
Ces nouveaux commentaites
sont utilisables uniquement dans le cas où tout le reste de la ligne
est un commentaire.
Déclarations
En C, vous avez
été habitué à déclarer les variables
en début de bloc, c'est-à-dire en début de fonction
ou de procédure. En C++, il est possible de déclarer une
variable à tout moment dans le code.
/* Code C */
int FaitQqch(
int
a, int b)
{
int
nRetour;
int
i;
int
fVar;
fVar = a + b;
for(
i=0; i<20; i++ )
{
fVar = fVar + i;
}
nRetour = fVar -
a*b;
return
nRetour;
} |
// Code C++
int FaitQqch(
int
a, int b)
{
int
fVar = a + b;
for(
int
i=0; i<20; i++ )
{
fVar = fVar + i;
}
int
nRetour = fVar - a*b;
return
nRetour;
} |
Cet exemple est bien entendu
dénué de tout intérêt, mais il montre la liberté
offerte par C++ en ce qui concerne les déclarations et les initialisations
des variables.
Référence
C++ introduit une
nouvelle notion fondamentale : les références. C'est
une notion qui peut sembler difficile à assimiler au départ,
notamment pour des personnes qui ne sont pas encore habituées à
utiliser des pointeurs en C.
La notion de référence
est directement liée au passage de paramètres à des
fonctions en C. Nous savons tous que lorsque nous voulons transmettre à
une fonction la valeur d'une variable ou au contraire la donnée
réelle (en fait l'adresse), nous n'utilisons pas les mêmes
méthodes.
Par exemple, soit les fonctions
suivantes :
int FaitQqch(
int
a, int b)
{
int
nRet;
if( a==0 )
a=10;
nRet = a + b;
return
nRet;
} |
int FaitQqch2(
int
* a, int * b)
{
int
nRet;
if( *a==0 )
*a=10;
nRet = *a + *b;
return
nRet;
} |
Nous voyons tout de suite
que dans le cas d'un appel comme celui-ci :
...
int a, b, c,
d;
a = 0;
b = 5;
c = FaitQqch(a,b);
d = FaitQqch2(&a,&b);
... |
c
et d auront
la même valeur, par contre, ce qui est intéressant, c'est
qu'à la sortie de FaitQqch,
la valeur restera inchangée, alors que pour FaitQqch2,
a
vaudra désormais
10
! Ceci est dû au passage par adresse, et non par valeur.
Tout cela, vous devez le
savoir. En revanche, vous allez apprendre une nouvelle technique qui est
une sorte de mélange des deux précédentes : les références.
Voici ce que devient notre
fonction, FaitQqch3
:
int FaitQqch3(int
&a, int &b)
{
int
nRet;
if( a==0 )
a=10;
nRet = a + b;
return
nRet;
} |
Le "&"
signifie que l'on passe par référence. La ligne de déclaration
de la fonction est en fait la seule différence avec une transmission
par valeur, d'un point de vue code. C'est-à-dire que l'utilisation
des variables dans la fonction s'opère sans "*"
et l'appel à la fonction sans "&".
C'est ce qui fait la puissance des références : c'est transparent
pour l'implémentation, mais cela possède la puissance des
pointeurs.
Nous nous habituerons à
leur utilisation au fur et à mesure.
Opérateurs new et
delete
En plus des "anciens"
malloc
et free
du C, C++ possède un nouveau jeu d'opérateurs d'allocation/désallocation
de mémoire : new
et delete.
Ils ont été
créés principalement pour la gestion dynamique des objets,
mais on peut les utiliser également pour des variables simples.
Voici une comparaison d'utilisation
:
...
/* pour un simple pointeur */
int * pInt;
pInt = (int*)malloc(1*sizeof(int));
free(pInt);
...
/* pour un tableau */
pInt = (int*)malloc(100*sizeof(int));
free(pInt);
... |
...
// pour un simple pointeur
int * pInt;
pInt = new int;
delete pInt;
...
// pour un tableau
pInt = new int[100];
delete pInt;
...
// Tableau de classes
pToto = new
MyClass[50];
delete []MyClass; |
Vous remarquerez donc tout
de suite les différences, qui sont évidentes. Insistons simplement
sur la désallocation à l'aide de l'opérateur delete,
qui change suivant que le pointeur est simple, ou bien qu'il correspond
à un tableau lorsqu'il est composé d'objets.
Les
entrées/sorties en C++
Le langage C++ dispose
de nouvelles routines d'entrées/sorties qui sont plus simples à
utiliser.
La sortie standard "cout"
:
// include indispensable pour cout
#include
void main()
{
cout << "Hello
World !";
cout << "Hello
World !\n";
cout << "Hello
World !" << endl;
int
n = 5;
cout << "La
valeur est " << n << endl;
float
f = 3.14f;
char
*ch = "Coucou";
cout << ch
<< " float = "
<< f << endl;
} |
Ce programme donne en sortie
:
Hello World !Hello World !
Hello World !
La valeur est 5
Coucou float = 3.14
Cette nouvelle sortie standard
est donc très intuitive à employer du fait qu'il est inutile
de lui préciser le format de la valeur que l'on souhaite afficher.
Le "endl"
est en fait disponible pour éviter d'éventuels "\n",
en fin de ligne.
L'entrée standard
"cin" :
// include indispensable pour cout et cin
#include
void main()
{
int
n;
cout << "Entrez
un entier : ";
cin >> n;
cout << "Vous
avez entré : " << n <<
endl;
char
ch[81];
float
f;
cout << "Entrez
un entier, une chaine, puis un float :";
cin >> n >> ch >>
f;
cout << "Vous
avez entré : " << n <<
ch << f << endl;
} |
Cet exemple illustre brièvement
comment fonctionne "cin".
Bien entendu, aucun contrôle de type n'est effectué, c'est
donc à l'utilisateur qu'il advient de faire attention.
|