Skip to content
Snippets Groups Projects
Commit 9b2aa58e authored by Vincent Nivoliers's avatar Vincent Nivoliers
Browse files

syntaxe C++

parent bbba7f4d
No related branches found
No related tags found
No related merge requests found
...@@ -23,7 +23,7 @@ faut ajouter, puis à rédiger le code sous les commentaires correspondants. ...@@ -23,7 +23,7 @@ faut ajouter, puis à rédiger le code sous les commentaires correspondants.
plusieurs lignes, mais il n'est pas possible de plusieurs lignes, mais il n'est pas possible de
les imbriquer (et donc de placer des `/* ... */` dans un commentaire) : les imbriquer (et donc de placer des `/* ... */` dans un commentaire) :
```C++ ```cpp
/* commentaire sur une ligne */ /* commentaire sur une ligne */
/* commentaire /* commentaire
sur deux lignes */ sur deux lignes */
...@@ -32,7 +32,7 @@ les imbriquer (et donc de placer des `/* ... */` dans un commentaire) : ...@@ -32,7 +32,7 @@ les imbriquer (et donc de placer des `/* ... */` dans un commentaire) :
Il est aussi possible en plus de rajouter de courts commentaire en utilisant `//`. Il est aussi possible en plus de rajouter de courts commentaire en utilisant `//`.
Une fois écrit `//`, le reste de la ligne n'est plus interprété. Une fois écrit `//`, le reste de la ligne n'est plus interprété.
```C++ ```cpp
int a ; //un commentaire de fin de ligne int a ; //un commentaire de fin de ligne
``` ```
...@@ -68,7 +68,7 @@ la documentation du `C++`. ...@@ -68,7 +68,7 @@ la documentation du `C++`.
Comme mentionné ci dessus, chaque type primitif est stocké sur un certain nombre Comme mentionné ci dessus, chaque type primitif est stocké sur un certain nombre
d'octets en mémoire. Lorsque vous écrirez : d'octets en mémoire. Lorsque vous écrirez :
```C++ ```cpp
int variable = 12 ; int variable = 12 ;
``` ```
...@@ -84,7 +84,7 @@ même type de donnée. Un tableau peut être alloué statiquement ou dynamiqueme ...@@ -84,7 +84,7 @@ même type de donnée. Un tableau peut être alloué statiquement ou dynamiqueme
L'allocation dynamique sera abordée plus tard. Un tableau peut être alloué L'allocation dynamique sera abordée plus tard. Un tableau peut être alloué
statiquement via : statiquement via :
```C++ ```cpp
int tableau[4] ; int tableau[4] ;
``` ```
...@@ -98,7 +98,7 @@ dynamique](#alloc_dyn_tableau) ...@@ -98,7 +98,7 @@ dynamique](#alloc_dyn_tableau)
Il est possible d'accéder à un tableau en utilisant les crochets `[` et `]`. Il est possible d'accéder à un tableau en utilisant les crochets `[` et `]`.
```C++ ```cpp
int tableau[4] ; int tableau[4] ;
tableau[0] = 1 ; tableau[0] = 1 ;
tableau[3] = 2 ; tableau[3] = 2 ;
...@@ -111,7 +111,7 @@ tableau[2 = tableau[0] ; ...@@ -111,7 +111,7 @@ tableau[2 = tableau[0] ;
Les instructions principales permettant de faire varier le fil d'éxécution d'un Les instructions principales permettant de faire varier le fil d'éxécution d'un
programme en fonction de tests sont les suivantes : programme en fonction de tests sont les suivantes :
```C++ ```cpp
if(test) { if(test) {
/* code execute en cas de test vrai */ /* code execute en cas de test vrai */
} else { } else {
...@@ -136,7 +136,7 @@ do { ...@@ -136,7 +136,7 @@ do {
Le comportement par défaut en `C++` est la *copie*. Par exemple dans le code : Le comportement par défaut en `C++` est la *copie*. Par exemple dans le code :
```C++ ```cpp
int a = 5 ; int a = 5 ;
int b = a ; int b = a ;
b = 12 ; b = 12 ;
...@@ -154,7 +154,7 @@ variable. Dans le code précédent, pour faire en sorte que la variable `b` soit ...@@ -154,7 +154,7 @@ variable. Dans le code précédent, pour faire en sorte que la variable `b` soit
une référence sur la variable `a` et partage les mêmes octets, il aurait ainsi une référence sur la variable `a` et partage les mêmes octets, il aurait ainsi
fallu écrire : fallu écrire :
```C++ ```cpp
int a = 5 ; int a = 5 ;
int & b = a ; int & b = a ;
b = 12 ; b = 12 ;
...@@ -177,7 +177,7 @@ ou à la procédure. Ainsi, une fonction modifiant la valeur de ses paramètre n ...@@ -177,7 +177,7 @@ ou à la procédure. Ainsi, une fonction modifiant la valeur de ses paramètre n
modifiera pas la valeur des variables utilisées pour fournir ces paramètres dans modifiera pas la valeur des variables utilisées pour fournir ces paramètres dans
la fonction appelante. C'est cette stratégie qui est appliquée en `C++`. la fonction appelante. C'est cette stratégie qui est appliquée en `C++`.
```C++ ```cpp
void f(int a) { void f(int a) {
a = a+1 ; a = a+1 ;
} }
...@@ -222,7 +222,7 @@ de sa portée, ou si vous voulez éviter la copie de données volumineuses pass ...@@ -222,7 +222,7 @@ de sa portée, ou si vous voulez éviter la copie de données volumineuses pass
en paramètre. Vous pouvez pour cela utiliser les références en paramètre de en paramètre. Vous pouvez pour cela utiliser les références en paramètre de
fonctions: fonctions:
```C++ ```cpp
void f(int & ref) { void f(int & ref) {
ref = ref + 1 ; ref = ref + 1 ;
...@@ -242,14 +242,14 @@ mémoire possède une *adresse*. L'adresse d'un objet en `C++` est l'adresse du ...@@ -242,14 +242,14 @@ mémoire possède une *adresse*. L'adresse d'un objet en `C++` est l'adresse du
premier octet servant à stocker cet objet. Vous pouvez manipuler des adresses en premier octet servant à stocker cet objet. Vous pouvez manipuler des adresses en
utilisant le symbole `*`. Per exemple, l'instruction utilisant le symbole `*`. Per exemple, l'instruction
```C++ ```cpp
int * a ; int * a ;
``` ```
crée une variable qui stockera *l'adresse* d'un entier. Étant donné un objet en crée une variable qui stockera *l'adresse* d'un entier. Étant donné un objet en
`C++`, il est possible d'obtenir son adresse via le symbole `&`. Par exemple : `C++`, il est possible d'obtenir son adresse via le symbole `&`. Par exemple :
```C++ ```cpp
int a = 10 ; int a = 10 ;
int * pa = &a ; int * pa = &a ;
``` ```
...@@ -259,7 +259,7 @@ Attention ici `a` et `pa` ne sont pas deux noms pour la même chose : la variabl ...@@ -259,7 +259,7 @@ Attention ici `a` et `pa` ne sont pas deux noms pour la même chose : la variabl
`pa` est le nom d'une case mémoire contenant l'adresse d'une autre case mémoire `pa` est le nom d'une case mémoire contenant l'adresse d'une autre case mémoire
contenant un entier. contenant un entier.
```C++ ```cpp
int a = 10 ; int a = 10 ;
int * pa = &a ; int * pa = &a ;
// pa = 10 ; //erreur : pb n'est pas un entier // pa = 10 ; //erreur : pb n'est pas un entier
...@@ -269,7 +269,7 @@ L'opération consistant à utiliser une adresse pour accéder à la case mémoir ...@@ -269,7 +269,7 @@ L'opération consistant à utiliser une adresse pour accéder à la case mémoir
correspondante s'appelle le *déréférencement*. Cette opération est réalisée en correspondante s'appelle le *déréférencement*. Cette opération est réalisée en
utilisant également le symbole `*`. utilisant également le symbole `*`.
```C++ ```cpp
int a = 10 ; int a = 10 ;
int * pa = &a ; int * pa = &a ;
int b = *pa ; //b prend la valeur 10 int b = *pa ; //b prend la valeur 10
...@@ -300,7 +300,7 @@ de sa *portée*, matérialisée par les accolades (`{`, `}`). ...@@ -300,7 +300,7 @@ de sa *portée*, matérialisée par les accolades (`{`, `}`).
Les paramètres d'une fonction sont également limités à la portée de cette Les paramètres d'une fonction sont également limités à la portée de cette
fonction : fonction :
```C++ ```cpp
int f(int a) { int f(int a) {
int b = 10 ; int b = 10 ;
int c = 0 ; int c = 0 ;
...@@ -346,7 +346,7 @@ l'adresse de la zone allouée est perdue, et vous ne pourrez plus accéder à la ...@@ -346,7 +346,7 @@ l'adresse de la zone allouée est perdue, et vous ne pourrez plus accéder à la
zone, ou la libérer pour faire de la place en mémoire. Une allocation typique zone, ou la libérer pour faire de la place en mémoire. Une allocation typique
d'un objet sur le tas a donc la forme : d'un objet sur le tas a donc la forme :
```C++ ```cpp
int * a = (int *) malloc(sizeof(int)) ; int * a = (int *) malloc(sizeof(int)) ;
``` ```
...@@ -362,7 +362,7 @@ des autres, il n'y a pas d'espace vide entre les données). Il est donc possible ...@@ -362,7 +362,7 @@ des autres, il n'y a pas d'espace vide entre les données). Il est donc possible
de réserver un tableau dans le tas en allouant simplement le nombre d'octets de réserver un tableau dans le tas en allouant simplement le nombre d'octets
nécessaire pour *l'ensemble* des données du tableau : nécessaire pour *l'ensemble* des données du tableau :
```C++ ```cpp
/* allocation d'un tableau de 10 entiers */ /* allocation d'un tableau de 10 entiers */
int * tab = (int *) malloc(10*sizeof(int)) ; int * tab = (int *) malloc(10*sizeof(int)) ;
``` ```
...@@ -370,7 +370,7 @@ int * tab = (int *) malloc(10*sizeof(int)) ; ...@@ -370,7 +370,7 @@ int * tab = (int *) malloc(10*sizeof(int)) ;
Les données sont ensuite accessibles comme d'habitude en utilisant les crochets Les données sont ensuite accessibles comme d'habitude en utilisant les crochets
(`[`, `]`) : (`[`, `]`) :
```C++ ```cpp
for(int i = 0; i < 10; ++i) { for(int i = 0; i < 10; ++i) {
tab[i] = 2*i ; tab[i] = 2*i ;
} }
...@@ -387,7 +387,7 @@ nombre d'octets à libérer. Quelque part, en sous main, le nombre d'octets ...@@ -387,7 +387,7 @@ nombre d'octets à libérer. Quelque part, en sous main, le nombre d'octets
correspondants à l'adresse a été enregistré. Vous pouvez ainsi libérer la correspondants à l'adresse a été enregistré. Vous pouvez ainsi libérer la
mémoire allouée par les deux instructions précédentes via : mémoire allouée par les deux instructions précédentes via :
```C++ ```cpp
free(a) ; free(a) ;
free(tab) ; free(tab) ;
``` ```
...@@ -405,7 +405,7 @@ produit une adresse qu'il faut récupérer. À la différence de `malloc` cette ...@@ -405,7 +405,7 @@ produit une adresse qu'il faut récupérer. À la différence de `malloc` cette
adresse est correctement typée par rapport au type de l'objet alloué. adresse est correctement typée par rapport au type de l'objet alloué.
<a name="alloc_dyn_tableau"></a> <a name="alloc_dyn_tableau"></a>
```C++ ```cpp
int * a = new int ; int * a = new int ;
int * tab = new int[10] ; int * tab = new int[10] ;
``` ```
...@@ -414,7 +414,7 @@ new suffit. Comme précédemment, chaque utilisation de `new` doit être un ...@@ -414,7 +414,7 @@ new suffit. Comme précédemment, chaque utilisation de `new` doit être un
jour compensée par l'utilisation de `delete`. La suppression des variables jour compensée par l'utilisation de `delete`. La suppression des variables
précédentes se fait via : précédentes se fait via :
```C++ ```cpp
delete a ; delete a ;
delete[] tab ; delete[] tab ;
``` ```
...@@ -432,7 +432,7 @@ méthodes pour manipuler votre nouveau type de données. ...@@ -432,7 +432,7 @@ méthodes pour manipuler votre nouveau type de données.
Les classes et structures se déclarent via Les classes et structures se déclarent via
```C++ ```cpp
class nom_classe { class nom_classe {
/* ... */ /* ... */
} ; } ;
...@@ -445,7 +445,7 @@ struct nom_structure { ...@@ -445,7 +445,7 @@ struct nom_structure {
Dans la définition d'une classe ou d'une structure, les mots clé `public` et Dans la définition d'une classe ou d'une structure, les mots clé `public` et
`private` permettent de définir ce qui sera accessible ou non pour votre classe `private` permettent de définir ce qui sera accessible ou non pour votre classe
```C++ ```cpp
class nom_classe { class nom_classe {
/* ... */ //ici tout est inaccessible /* ... */ //ici tout est inaccessible
...@@ -479,7 +479,7 @@ dans une classe tout est privé, alors que dans une structure tout est public. ...@@ -479,7 +479,7 @@ dans une classe tout est privé, alors que dans une structure tout est public.
Un exemple de déclaration de structure pourrait être : Un exemple de déclaration de structure pourrait être :
```C++ ```cpp
class Fusee { class Fusee {
public : public :
...@@ -515,7 +515,7 @@ class Fusee { ...@@ -515,7 +515,7 @@ class Fusee {
Le code des méthodes de cette structure devra ensuite être fourni via Le code des méthodes de cette structure devra ensuite être fourni via
```C++ ```cpp
Fusee::Fusee() { Fusee::Fusee() {
/* ... */ /* ... */
...@@ -551,7 +551,7 @@ structure, et vous pourrez l'obtenir via `sizeof(Fusee)`. Il est ensuite ...@@ -551,7 +551,7 @@ structure, et vous pourrez l'obtenir via `sizeof(Fusee)`. Il est ensuite
possible de déclarer un objet de type structure et d'accéder à ses champs via la possible de déclarer un objet de type structure et d'accéder à ses champs via la
syntaxe : syntaxe :
```C++ ```cpp
/* allocation sur la pile */ /* allocation sur la pile */
Fusee f ; Fusee f ;
/* le . permet d'acceder aux champs et methodes de la structure */ /* le . permet d'acceder aux champs et methodes de la structure */
...@@ -572,7 +572,7 @@ Une classe peut être définie récursivement, tant qu'elle ne contient que des ...@@ -572,7 +572,7 @@ Une classe peut être définie récursivement, tant qu'elle ne contient que des
*adresses* ou des *références* sur des structures similaires. Sinon, il serait bien impossible *adresses* ou des *références* sur des structures similaires. Sinon, il serait bien impossible
de déterminer le `sizeof` de la structure pour cause de récursion de déterminer le `sizeof` de la structure pour cause de récursion
```C++ ```cpp
class Personne { class Personne {
int num_secu ; int num_secu ;
Personne * parent1 ; Personne * parent1 ;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment