Académique Documents
Professionnel Documents
Culture Documents
1
Plan de la leçon
⮚ Historique du langage C++
⮚ Les bases du langage C++
▪ La bibliothèque standard de C++
▪ Les entrées/sorties standard en C++
▪ Les types de base
▪ Les commentaires
▪ Les opérateurs
▪ La fonction main
2
Historique du langage C++
3
Introduction (1)
Date d’apparition :
Le C++ est apparu en 1983 et sa dernière révision remonte à 2017
Auteur: Bjarne Stroustrup
Style de programmation (paradigme): procédural, générique et orienté
objet
Les normes:
ISO/CEI 14882:1998
ISO/CEI 14882:2003
ISO/CEI 14882:2011
ISO/CEI 14882:2014
ISO/CEI 14882:2017
4
Introduction (2)
Influencé par :
C, Simula, Ada 83, Algol 68,Clu, Ml
Influence sur :
Ada 95, C#, PHP, D, JavaScript, Java, X++
Implémentations:
GNU Compiler collection, Microsoft Visual C++, Borland C++ Builder,
XCode Tools
5
Historique (1)
C++ est un langage de programmation permettant la programmation
sous de multiples paradigmes comme la programmation procédurale,
la programmation orientée objet (POO) et la programmation
générique.
7
Historique (4)
En langage C, ++ est l'opérateur d'incrémentation, c'est-à-dire
l'augmentation de la valeur d'une variable de 1. C'est pourquoi C++
porte ce nom : cela signifie que C++ est un niveau au-dessus du C.
8
Historique (5)
Stroustrup a commencé à travailler sur C avec classes en 1979.
9
Historique (6)
Quand Stroustrup commença à travailler pour les laboratoires Bell, on
lui demanda d'analyser le noyau UNIX en vue de faire du calcul
distribué.
10
Historique (7)
Dès le départ, le nouveau langage ajoutait à C la notion de classe (avec
encapsulation des données), de classe dérivée, de vérification des types
renforcés (typage fort), d'« inlining », et d'argument par défaut.
Comme Stroustrup développait C avec classes, il écrivit CFront, un
compilateur qui générait du code source C à partir de code source C
avec classes. La première commercialisation se fit en octobre 1985.
11
Historique (8)
En 1983, le nom du langage passa de C avec classes à celui de « C++ ».
Parmi les nouvelles fonctionnalités qui furent ajoutées au langage, il y
avait les fonctions virtuelles, la surcharge des opérateurs et des
fonctions, les références, les constantes, le contrôle du typage amélioré
et les commentaires en fin de ligne.
En 1985, la première édition de « The C++ programming Language »,
fut publiée, apportant ainsi une référence importante au langage qui
n'avait pas encore de nom.
12
Historique (9)
En 1989, sortie de la version 2.0 de C++.
13
Historique (10)
La bibliothèque standard évoluait de concert avec le langage C++. La
première addition à la bibliothèque standard de C++ concerne les flux
d'entrées/sorties qui fournissent les fonctionnalités nécessaires au
remplacement des fonctions C traditionnelles telles que printf et scanf.
Ensuite, parmi les additions les plus significatives, il y eut la Standard
Template Library.
Après des années de travail, un comité réunissant l'ANSI et
l'ISO standardisa C++ (ISO/CEI 14882:1998), en 1998, année où le
comité de standardisation se réunit à Sophia Antipolis dans le sud de la
France. 14
Historique (10)
Pendant quelques années après la sortie officielle du standard, le
comité traita le rapport de problèmes et, en 2003, publia une version
corrigée du standard C++.
15
Les fonctionnalités de C++ (1)
On peut considérer que C++ « est du C » avec un ajout de
fonctionnalités. Cependant, certains programmes syntaxiquement
corrects en C ne le sont pas en C++.
Les fonctionnalités ajoutées sont :
⮚ les déclarations reconnues comme instructions (repris dans C99) ;
⮚ les opérateurs new et delete pour la gestion d'allocation mémoire ;
⮚ le type de données bool (booléen) ;
⮚ les références ;
⮚ le mot clé const pour définir des constantes (repris par C à la fin
des années 1980) ;
⮚ les fonctions inline (repris dans C99) ;
⮚ les paramètres par défaut dans les fonctions ;
16
Les fonctionnalités de C++ (2)
⮚ les référentiels lexicaux (Espace de noms) et l'opérateur de
résolution :: ;
⮚ les classes, ainsi que tout ce qui y est lié : l'héritage, les fonctions
membres, les fonctions membres virtuelles, les constructeurs et
le destructeur ;
⮚ la surcharge des opérateurs ;
⮚ les templates ;
⮚ la gestion d'exceptions ;
⮚ l'identification de type pendant l'exécution (RTTI : run-time type
information) ;
17
Les fonctionnalités de C++ (3)
⮚ le commentaire sur une ligne introduit par « // » (existant
dans BCPL, repris dans C99);
⮚ les fonctions lambda (C++11);
18
La bibliothèque standard de C+
+
19
La bibliothèque standard de C++ (1)
⚫ La bibliothèque standard du C++ (C++ Standard Library en anglais) est
une bibliothèque de classes et de fonctions standardisées selon la norme ISO pour
le langage C++. Elle fournit des outils (généralement sous la forme de patrons) tels
que :
20
La bibliothèque standard de C++ (2)
⚫ N.B: La bibliothèque standard du C++ contient aussi la bibliothèque
standard du C
⚫ Une des principales briques de cette bibliothèque est sans aucun doute la
STL (abréviation de « Standard Template Library.) Meng Lee1,2.
21
La bibliothèque standard de C++ (3)
⚫ L'ensemble de la bibliothèque est spécifiée dans la norme ISO qui
définit également le langage : ISO/CEI 14882. Elle est incluse en
totalité dans l'espace de noms std (standard). Pour l’utiliser, il est
donc nécessaire de placer l'injonction :
22
Les entrées/sorties standards
23
Les entrées/sorties standards
⚫ Cette section traite de l'utilisation simple des flux standard d'entrée-sortie, c'est-à-dire la
manière de faire en C++ les opérations qu'on fait habituellement en C avec les fonctions
printf et scanf.
⮚ Un programme qui utilise les flux standard d'entrée-sortie doit comporter la directive
#include <iostream.h>
⮚ ou bien, si vous utilisez un compilateur récent et que vous suivez de près les
recommandations de la norme :
#include <iostream>
24
Les flux d'entrée-sortie
⚫ Les flux d'entrée-sortie sont représentés dans les programmes par les trois
variables, pré-déclarées et pré-initialisées suivantes :
25
Ecritures et lectures
⚫ Les écritures et lectures sur ces unités ne se font pas en appelant des fonctions, mais à
l'aide des opérateurs <<, appelé opérateur d'injection (« injection » de données dans un
flux de sortie), et >>, appelé opérateur d'extraction(« extraction » de données d'un flux
d'entrée). Or, le mécanisme de la surcharge des opérateurs (voir dans les cours qui
suivent) permet la détection des types des données à lire ou à écrire. Ainsi, le
programmeur n'a pas à s'encombrer avec des spécifications de format.
26
La syntaxe d'une injection de données
⚫ Syntaxe : cout < < expr1 < < . . . < < exprn ;
On utilise le même opérateur pour afficher des caractères, des entiers, des réels ou
des chaînes de caractères etc.
27
La lecture au clavier avec «cin »
⚫ cin permet de manipuler l'entrée standard, qui est généralement (mais pas toujours) le
clavier. C’est ce que l'on appelle un flux d'entrée, quelque chose qui permet de
manipuler les informations saisies par l'utilisateur. Lorsque l'on réalise une opération
avec (comme par exemple cin >> age; ), il extrait des informations du flux d'entrée (il
les sort du flux pour les mettre dans la variable en quelque sorte).
⚫ De plus, à chaque fois que l'on demande à cin d'extraire des données du flux, ce
dernier enregistre des informations sur son état, à savoir le succès ou l'échec de
l'opération d'extraction. Si tout s'est déroulé normalement, l'état sera bon, sinon le code
nous indiquera la où sont survenues les erreurs.
28
La lecture au clavier avec «cin »
La lecture au clavier
Cette instruction lit (au clavier) des valeurs et les affecte à expre1 puis
expre2.
⚫ cin est le flot d'entrée standard, et > > est un opérateur similaire à <<.
Les caractères tapés au clavier sont enregistrés dans un buffer dans lequel
les cin viennent puiser des valeurs. Les espaces, les tabulations et les fins de
ligne sont des séparateurs.
29
Les types de base
30
Les types prédéfinis C++ (1)
C++ est un langage typé. Cela signifie que chaque entité manipulée dans les
programmes doit disposer d’un type de données grâce auquel le compilateur pourra
vérifier la validité des opérations qu’on lui appliquera. La prise en compte du type des
données peut apparaître comme une contrainte pour le programmeur, mais en réalité il
s’agit surtout d’une aide à la détection des erreurs.
⮚ le type vide : void. Ce type est utilisé pour spécifier le fait qu’il n’y a pas de type.
Cela a une utilité pour faire des procédures (fonctions ne renvoyant rien) et les
pointeurs sur des données non typées.
31
Les types prédéfinis C++ (2)
⮚ les booléens : bool, qui peuvent prendre les valeurs true et false
⮚ les caractères : char ; les caractères longs : wchar_t (ce n’est un type de base
que pour le langage C++, mais il est également défini dans la librairie standard
C et est donc utilisable malgré tout en C) ;
32
Les types prédéfinis C++ (3)
⮚ Les types entiers (int) peuvent être caractérisés d’un des mots-clés long
ou short. Ces mots-clés permettent de modifier la taille du type, c’est-à-
dire la plage de valeurs qu’ils peuvent couvrir. De même, les réels en
double précision peuvent être qualifiés du mot-clé long, ce qui augmente
leur plage de valeurs.
33
Les types prédéfinis C++ (4)
⮚ Le type char est généralement codé sur un octet (8 bits),
Le type int est celui qui permet de stocker les entiers au format natif du processeur
utilisé. Il est donc codé sur deux octets sur les machines 16 bits et sur quatre octets
sur les machines 32 bits.
34
Note :
Remarquez que le type int est codé sur 64 bits sur les machines 64 bits. Le type long int
Les types prédéfinis C++ (5)
devant lui être supérieur, il doit également être codé sur 64 bits ou plus.
Le type short int peut quant à lui être sur 16 ou sur 32 bits. Il n’existe donc pas, sur ces
machines, de type permettant de manipuler les valeurs 16 bits si le type short int est codé
sur 32 bits, ou, inversement, de manipuler les valeurs 32 bits s’il est codé sur 16 bits.
Les types char, wchar_t et int peuvent être signés ou non. Un nombre signé peut être
négatif. Ce n’est pas le cas pour un nombre non signé. Lorsqu’un nombre est signé, la
valeur absolue du plus grand nombre représentable est plus petite. Par défaut, les nombres
entiers sont signés.
35
Les types prédéfinis C++ (6)
Note :
Ces mots-clés peuvent être intervertis librement avec les mots-clés long
et short pour les types entiers.
36
Types signés et non signés (1)
unsigned char signed char
unsigned wchar_t signed wchar_t
37
Types signés et non signés (2)
Par exemple, si le type char est codé sur 8 bits, on peut coder les
nombres allant de 0 à 256 avec ce type en non signé (il y a 8 chiffres
binaires, chacun peut valoir 0 ou 1, on a donc 2 puissance 8
combinaisons possibles, ce qui fait 256).
38
Types signés et non signés (3)
En signé, les valeurs s’étendent de -128 à 127: un des chiffres binaires
est utilisé pour le signe, il en reste 7 pour coder le nombre, donc il reste
128 possibilités dans les positifs comme dans les négatifs. 0 est
considéré comme positif.
39
Types signés et non signés (4)
Type nombre d’octets plage de valeurs
char 1 octet -127 to 127 or 0 to 255
unsigned char 1 octet 0 to 255
signed char 1 octet -127 to 127
int 4 octets -2147483648 to 2147483647 unsigned int 4 octets
0 to 4294967295
signed int 4 octets -2147483648 to 2147483647
short int 2 octets -32768 to 32767
unsigned short int 2 octets 0 to 65,535
signed short int 2octets -32768 to 32767
long int 4 octets -2,147,483,647 to 2,147,483,647
signed long int 4 octets same as long int
unsigned long int 4 octets 0 to 4,294,967,295
float 4 octets +/- 3.4e +/- 38 (~7 digits)
double 8 octets +/- 1.7e +/- 308 (~15 digits)
long double 8 octets +/- 1.7e +/- 308 (~15 digits)
char_t 2 or 4 octets 1 wide character
40
Les commentaires
41
Les commentaires (1)
Les commentaires sont des textes explicatifs qui explicitent certaines parties
du programme. Ils ne représentent pas des instructions qui seront prises en
compte lors de la compilation. Ils sont nécessaires et très simples à faire. Tout
programme doit être commenté. Attention ! Cependant, trop de
commentaires tuent le commentaire, parce que les choses importantes
peuvent noyées dans les banalités.
Il existe deux façons de faire des commentaires en C++
⮚ les commentaires de type C
⮚ les commentaires de fin de ligne.
42
Les commentaires (2)
⮚ Les commentaires de type C
Les commentaires C commencent avec la séquence barre oblique – étoile et se
terminent avec la séquence inverse : une étoile suivie d’une barre oblique.
Exemple
/* Ceci est un commentaire C */
Ces commentaires peuvent s’étendre sur plusieurs lignes. En revanche, les
commentaires de fin de ligne s’arrêtent à la fin de la ligne courante, et pas avant.
Ils permettent de commenter plus facilement les actions effectuées sur la ligne
concernée, avant le commentaire.
43
Les commentaires (3)
⮚ Les commentaires de fin de ligne.
action suivante
44
Les Opérateurs
45
Les opérateurs
Les opérateurs sont des symboles qui permettent de manipuler des
variables, c'est-à-dire d’effectuer des opérations, de les évaluer, etc .
Les opérateurs de C++ sont presque les mêmes que ceux du langage C.
46
Opérateur d’Affectation
Il est symbolisé par : =
int x,y;
x = 5; //on affecte 5 a la variable x
y = 2; //on affecte 2 a la variable y
x = y; //on affecte la valeur de la variable y a x
47
L'opérateur d'affectation additionneur
(opérateur assignation)
Il est symbolisé par : +=
<Destination> += <Source>; Où <Source> et <Destination> doivent être
de même nature et où <Source> est une expression et <Destination>
une variable ;
int x,y;
x = 5; //on affecte 5 a la variable x
y = 2; //on affecte 2 a la variable y
x + = y; // x vaut la valeur 7
48
L'opérateur d'affectation soustracteur
(opérateur assignation)
Il est symbolise par : -=
<Destination> - = <Source>; Où <Source> et <Destination> doivent être
de même nature et où <Source> est une expression et <Destination>
une variable ;
int x,y;
x =5; //on affecte 5 a la variable x
y =2; //on affecte 2 a la variable y
x - = y; // x vaut la valeur 3
49
L'opérateur d'affectation multiplicateur
(opérateur assignation)
Il est symbolisé par : *=
<Destination> *= <Source>; Où <Source> et <Destination> doivent être
de même nature et où <Source> est une expression et <Destination>
une variable ;
int x,y;
x = 5; //on affecte 5 a la variable x
y = 2; //on affecte 2 a la variable y
x * = y; // x vaut la valeur 10
50
L'opérateur d'affectation modulo (opérateur
d’assignation)
51
Les opérateurs de calcul
Le tableau ci-dessous va vous présenter les différents opérateurs de
calcul avec un exemple pour chaque opérateur.
52
Les opérateurs logiques (booléens)
Ce type d'opérateur permet d’évaluer plusieurs conditions en même
temps:
53
Les opérateurs d'incrémentation
opérateurs d’incrémentation /décrémentation
Ce type d'opérateur permet facilement d’augmenter ou de diminuer une variable
d'une unité. Ces opérateurs sont très utiles pour des structures telles que des boucles,
qui ont besoin d'un compteur (variable qui augmente de un en un).
54
La fonction main (1)
Le point d'entrée d’un programme en C++ est la fonction main(). La
fonction main renvoie au système d’exploitation un entier pour
signaler si elle a été menée à bien. La valeur de cet entier est 0 le
programme se termine correctement et une autre valeur entière si le
programme termine de manière inadaptée.
Le prototype de la fonction: int main()
La fonction main doit être de type entier.
55
La fonction main (2)
Façon de lancer un programme
Un programme peut être lancé de différentes manières:
1. Directement, en lançant l'exécutable : dans ce cas, il n’y pas d’argument
à passer à la fonction main.
2. Créer un raccourci ou lancer la "ligne de commande" (menu démarrer,
ensuite, accessoires et puis ligne de commandes) pour se rendre dans
le dossier contenant l’exécutable, et introduire le nom de ce dernier
suivi de la touche <enter> .
56
La fonction main (3)
Façon de lancer un programme
Dans ces deux derniers cas (c’est-à-dire le raccourci ou la ligne de commande), nous
pourrions envisager de passer un certain nombre d'arguments au programme :
c'est, par exemple, ce qui se passe avec la commande dir :
57
La fonction main (4)
Les paramètres de la fonction main
Les paramètres de la ligne de commande peuvent être récupérés par la
fonction main d’un programme C++. Si on souhaite les récupérer, la
fonction main doit attendre deux paramètres :
⮚ le nombre d'arguments, et
⮚ la valeur des arguments. Le prototype de la fonction main devient
alors : int main( int argc, char *argv[]) où :
⮚ argc : est un entier et contient le nombre d'arguments
58
La fonction main (5)
Les paramètres de la fonction main
⮚ argv : est un tableau de pointeurs de caractères, et contient les
valeurs des différents arguments fournis. Cela permet alors de
récupérer les lignes de commande.
Reprenons l’exemple de la commande dir :
1. si nous avons juste dir : argc= 0 argv[]=NULL
59
La fonction main (6)
Les paramètres de la fonction main
Par exemple, si on utilise le compilateur gcc, on pourra l’utiliser sous la
forme :
gcc fichier.cpp //argc=1 argv[0]="fichier.cpp": compile le fichier
nommé fichier.cpp, au nom (par défaut) de fichier.o
gcc fichier.cpp -o monfichier.o //argc=3 argv[0]="fichier.cpp"
argv[1]="-o" argv[2]="monfichier.o":
compile fichier.cpp mais on dit ("-o") que l'on donne un autre nom au
fichier binaire ("monfichier.o")
60
La fonction main (7)
61
La fonction main (8)
for(i=1;i<argc ; ++i)
{
cout << argv[i];
cout << endl;
}
return 0; // tout s’est bien passé
}
62
Prochain Chapitre: Les
instructions de contrôle
63