Vous êtes sur la page 1sur 10

Département : ATE

Module : Programmation orientée objets en C++


Enseignant : M. DIBOUNE.

Chapitre 1 : Notions de base de la programmation en C++


Dans ce premier chapitre nous allons aborder les notions de base de la programmation C++. Si vous
êtes déjà programmeur, vous allez certainement trouver des notions que vous connaissez déjà.
Au sommaire de ce chapitre :

• Qu’est-ce qu’un programme ?


• Qu’est-ce qu’un langage de programmation ?
• Qu’est que C++ ?
• De l’édition d’un programme à son exécution
• Premier programme C++
• Les variables et constantes
• Les expressions et les instructions.
• Le contrôle du flux des instructions

1. Qu’est-ce qu’un programme


Au démarrage de la machine, le processeur recherche dans la ROM les premières instructions à exécuter
(BIOS), ces instructions sont exécutées et permettent de :

• Tester les différents dispositifs matériels à contrôler : Ecran, clavier, les cellules de la mémoire
centrale, disques durs, etc.
• Chercher et charger le système d’exploitation.
• Passer à la première instruction du système d’exploitation.
Le système d’exploitation ainsi chargé permet de gérer les ressources de la machine durant son
fonctionnement, ces ressources comprennent tout ce qui est matériel (processeur, mémoire,
périphériques) et logiciel utilisable par l’utilisateur (applications et données utilisateurs).
En résumé. Le BIOS, le système d’exploitation et les différentes applications utilisateurs sont des
ensembles de programmes qui permettent de gérer et contrôler les ressources de la machine.

2. Langage de programmation
Le processeur ne peut interpréter les instructions d’un programme que sous forme binaires (instructions
machines). Cependant, ces codes en format binaires sont difficilement lus et édités par un être humain.
Dans ce contexte, les langages de programmation permettent de faciliter la tâche aux programmeurs et
de formuler des instructions à la machine en proposant une syntaxe généralement proche du langage
parlé (code source). Ces instructions littérales sont ensuite converties par un traducteur automatique
appelé compilateur en format binaire (code exécutable) compréhensible par la machine.
Exemple. C, C++, COBOL, ADA, JAVA, C#, etc.

1
3. Langage C++
C++ est un langage de programmation permettant le développement des programmes à la fois
procéduraux et orientés objets. Ses performances, sa malléabilité, et sa compatibilité avec son
prédécesseur: le langage C, lui ont permis de devenir le langage de programmation de prédilection pour
le développement des applications exigeant une grande performance telles que les applications pour les
systèmes embarqués et les calculs scientifiques.

3.1. Historique
Depuis la création de son prédécesseur le C, l’évolution du langage C++ est passée par deux phases
principales : C++ classique et C++ moderne, Les points de repère historique de l’évolution du langage
C++ est donnée par le schéma suivant :

1970 1979 1983 2011 2014 2017


C par C with classes C++ Standard C++11 Standard C++14 Standard C++17
Dennis Richie par Bjarne
Stroustrup

C++ classique C++ moderne

3.2. Pourquoi apprendre le C++


A. Un langage de programmation très populaire :
• Beaucoup de codes sont écrits en C++
• Indice de popularité très élevé
• Communauté très active : GitHub, stackoverflow.

B. C’est un langage pertinent :


Utilisé pour le développement des projets de très grandes envergures :
o Systèmes d’exploitation : Windows, Mac OsX.
o Applications : Photoshops.
o Les fonctionnalités des grands sites commerciaux : Amazon, Apple, Facebook, Google, etc.
o Très adaptés à nombreuses applications : Machine Learning, Systèmes embarqués, réseaux, etc.

4. De l’édition d’un programme à son exécution


Le processus de compilation se décompose en trois phases :
• La précompilation : effectuée par le préprocesseur et consiste à “traiter” les fichiers sources
(remplacement des macros, suppression des textes des commentaires, inclusion des fichiers,
etc.).
• La compilation : cette étape permet de créer des fichiers objets (extension .o) contenant la
traduction du code en langage machine.
• Edition des liens : c’est l’étape finale du processus de compilation et consiste à regrouper les
données ainsi que les fichiers objets et les bibliothèques (bibliothèque standard et bibliothèques
externes). Enfin, les références inter-fichiers sont résolues. Le résultat de l’édition des liens est
un fichier image qui pourra être chargé en mémoire et exécuté par le système d’exploitation.

2
5. Premier programme C++
5.1. Le programme « Hello World»
Le programme Hello est devenu presque banal pour débuter la programmation avec n’importe quel
langage de programmation. Le listing suivant présente un programme basique en C++ permettant
d’affiche un message «Hello World» à la console.
Listing 1.1 : Programme C++ «Hello World»
01 // Programme hello world en C++
02
03 #include<iostream>
04
05 int main()
07 {
08 Std::cout << "Hello World!";
09 return 0;
10 }

5.2. Les commentaires


La première ligne du programme est un commentaire. Toutes les lignes d’un programme C++
commençant par deux barres obliques (//) est considérée comme un commentaire et ne sera pris en
compte par le compilateur. Les textes entre / * et * / seront également considérés comme des
commentaires (commentaires de style ancien).
Remarque. Utilisez des commentaires dans vos programmes pour expliquer le fonctionnement des
sections difficiles. Il est également conseillé de commencer chaque programme avec une brève
description du programme.

5.3. La directive # include <iostream>


Les lignes de code commençant par # sont des directives lues et interprétées par le
préprocesseur. Dans notre exemple, la directive #include <iostream> donne une
instruction au préprocesseur d’inclure une section du code C++ afin de permettre d’effectuer
les entrées et sortie standards come l’affichage du message "Hello World!" dans la
console.

5.4. La fonction main

Tout programme C/C++ doit contenir au moins une fonction main(), cette fonction est le
point d’entrée du programme et c’est au niveau de cette fonction que le programme commence
son exécution, cette fonction appellera éventuellement à d’autres fonctions, dans sa forme la
plus simple, c'est une fonction sans argument, qui retourne un int. L'entier retourné permet
de renvoyer au système le statut d'exécution du programme ; par convention, la valeur de cet
entier dans le cas où l’exécution du programme est sans erreur est 0.

5.5. Les entrées sorties basiques


La bibliothèque standard <iostream> définit les flux pour l’entrée et la sortie :

3
Le flux Description
cin Entrée standard / entrée de console
cout Sortie standard / sortie de console
cerr Sortie standard d’erreurs
clog Sortie standard de journalisation (logging)

cin est utilisé pour la saisie des données au clavier et trois autres pour la sortie des données.

6. Les instructions préprocesseurs


Comme nous l’avons expliqué dans la section précédente, la compilation d’un programme en C++ se
déroule en trois étapes. La première est exécutée par le préprocesseur et a comme objectif de remplacer
les directives de compilation par des instructions C++. Ces directives de compilation commencent par
le symbole # et se terminant avec la fin de la ligne. Sa syntaxe est ainsi donnée comme suit :
#directive [paramètres]

6.1. Quelques commandes préprocesseurs


#include <iostream>
#include ″stdio.h″ Inclure le contenu des fichiers sources (bibliothèques).
#if
Compilation conditionnelle
#elif
#undef Annule (supprime) une macro ou un nom déjà défini.
#ifdef Tester l’existence d’un symbole
#ifndef Tester la non-existence d’un symbole
#define Définir une constante symbolique ou une macro avec des paramètres.
#error Génération d’un message d’erreur et arrêt de compilation.
6.2. Quelques exemples
Exemple 1. La directive #include
Listing 1.2 : la directive #include
01 #include<iostream>
02 int main()
03 {
04 std::cout << "Hello";
05 return 0;
07 }

Exemple 2. Compilation conditionnelle


Listing 1.3 : compilation conditionnelle
01 #ifdef _unix_
02 #include <unistd.h>
03 #elif defined _win32_
04 #include <windows.h>
05 #endif

Exemple 3. Tester si la version du compilateur gcc est supérieure à 3.2.0


3 2 0
_GNUC_ _GNUC_MINOR _GNUC_PATHLEVEL_

4
Listing 1.4 : Test de la version du compilateur gcc
01 #if(_GNUC_ > 3)|| \
02 (_GNUC_ == 3)&& (_GNUC_MINOR > 2) || \
03 (_GNUC_ == 3)&& (_GNUC_MINOR > 2)&& (_GNUC_PATHLEVEL_ > 0)
04 #error “incompatible version”

6.3. Les macros


La directive #define sert aussi à la définition des macros. Il référent à d’autres objets tels qu’une
constante numérique ou une chaîne de caractères. Les listing suivants constituent des exemples de
Macros:

Listing 1.5 : la directive #define


01 #define PI 3.141592
02 #define ERRMSG "ERRROR \n"
03 #define CARRE(x) ((x) * (x))

A la précompilation, les noms des macros préalablement sont recherchés dans le code source et
remplacés par leurs valeurs. Si une macro a plusieurs paramètres telle que CARRE dans le listing ci-
dessus, chacun des paramètres est remplacé par sa valeur effective. Ainsi, le code suivant :

Listing 1.6 : condition utilisant les noms des Macros


01 if (CARRE(d) > PI)
02 printf(ERRMSG);

Ce code du programme sera après précompilation:

Listing 1.7 : le code source après précompilation


01 if (((d) * (d)) > 3.141592)
02 printf("Une erreur s'est produite.\n");

7. Les variables et constantes


Une variable est un emplacement mémoire permettant de sauvegarder des valeurs, chaque variable
utilisée en C++ doit être déclaré, la déclaration d’une variable consiste à lui définir un identifiant et un
type.

7.1. L’identifiant d’une variable


Un identifiant valide est une séquence d’une ou de plusieurs lettres, chiffres ou de blancs
soulignés (_). Les caractères spéciaux ne doivent pas faire partie des identifiants des variables.
Les identifiants doivent impérativement commencer par une lettre ou un blanc souligné bien
que tels identifiants (commençant par un blanc souligné) sont considérés comme réservés aux
mots clés du compilateur et les identifiants externes. Et enfin les identifiants ne doivent pas être
des mots clés réservés du C++ (les mots clés réservés du C++ sont listés ci-dessous).

5
alignas (C++11), alignof (C++11), and, and_eq, asm, atomic_cancel,
atomic_commit, atomic_noexcept, auto, bitand, bitor, bool, break, case,
catch, char, char8_t (C++20), char16_t (C++11), char32_t (C++11), class,
compl, concept (C++20), const, consteval (C++20), constexpr (C++11),
constinit (C++20), const_cast, continue, co_await (C++20), co_return
(C++20), co_yield (C++20), decltype (C++11), default, delete, do, double,
dynamic_cast, else, enum, explicit, export, extern, false, float, for,
friend, goto, if, inline, int, long, mutable, namespace, new, noexcept
(C++11), not, not_eq, nullptr (C++11), operator, or, or_eq, private,
protected, public, reflexpr, register, reinterpret_cast, requires (C++20),
return, short, signed, sizeof, static, static_assert (C++11), static_cast,
struct, switch, synchronized, template, this, thread_local (C++11), throw,
true, try, typedef, typeid, typename, union, unsigned, using, virtual,
void, volatile, wchar_t, while, xor, xor_eq.

7.2. Les type d’une variable


Les valeurs des variables sont sauvegardées quelques par dans la mémoire comme étant une suite de
zéros et de uns. Le programme n’a pas besoin de spécifier l’adresse de la variable dans la mémoire mais
simplement de s’y référer par son nom. Néanmoins, le programme doit savoir le type de la donnée
enregistrée dans la variable. En effet, même si toutes les données sont enregistrées sous forme binaire,
la méthode d’interprétation ainsi que leurs tailles diffèrent selon leurs types.
Le tableau suivant résume les différents types en C++ :
Groupe Type
Types caractère char
char16_t
char32_t
Type entier (signé/non signé) signed char
unsigned char
signed short int
unsigned short int
signed int
unsigned int
signed long int
unsigned long int
signed long long int
unsigned long long int
Type virgule flottante float
double
long double
Type booléen bool
Type void void
Pointeur nul nullptr

La fonction en C++ permettant de retourner la taille d’une variable est sizeof().

Exercice. Ecrire un programme C++ qui permet d’afficher les tailles des différents types.

8. Les opérations du langage C++


8.1. Les opérateurs
a. L’affectation

6
Attribuer une valeur ou un résultat d’une expression à une variable de même type ou de type plus
généraliste. S = A + B

b. Opération arithmétiques

+ - * / %
Addition Soustraction Multiplication Division Modulo

c. Opérations logiques

|| && !
Ou logique Et logique Non logique

d. Opérations de comparaison

== < <= > >= !=


Egalité Inférieur Inférieur ou Supérieur Supérieur ou Différent
stricte égal stricte égal

e. Opération de calcul arithmétique et d’assignation

Opération Explication Exemple


+= Additionne deux valeurs et sauvegarde le résultat dans la A = 6
variable à droite de l’opération. A += 3 (A = A + 3)
Résultat : A = 9
-= Soustrait une valeur d’une autre et sauvegarde le résultat dans A = 6
la variable à droite de l’opération. A -= 2 (A = A - 2)
Résultat : A = 4
*= Multiplie deux valeurs et sauvegarde le résultat dans la A = 4
variable à droite de l’opération. A *= 3 (A = A*3)
Résultat : A = 12
/= Divise deux valeurs et sauvegarde le résultat dans la variable A = 15
à droite de l’opération. A /= 3
Résultat : A = 5

9. Les instructions de contrôle


A priori, les instructions d’un programme sont exécutées séquentiellement. Cependant, tous les langages
de programmation fournissent deux types d’instructions de contrôle permettant de rendre les
programmes plus intelligents et puissants :

• Les traitements répétitifs :


• Les traitements alternatifs :

9.1. Structures conditionnelles


9.1.1. L’instruction if

a. Syntaxe de l’instruction if

Listing 1.8 : Syntaxe de l’instruction if


01 if (expression)
02 instruction_1

b. Principe

7
Le bloc d’instruction instruction_1 n’est exécuté que si la valeur de l’expression est vraie.
c. Exemple
Ecrire un programme qui effectue une division entre deux nombres saisis par l’utilisateur

Listing 1.9 : Division entre deux nombres


01 #include<iostream>
02 using namespace std;
03 int main()
04 {
05 int i,j;
06 cin >> i; cin >> j;
07 if (j != 0)
08 cout << i/j << endl;
09 return 0;
10 }
9.1.2. L’instruction if … else …

a. Syntaxe de l’instruction if ... else ...

Listing 1.10 : Programme C++ «Hello World»


01 if (expression)
02 instruction_1
03 else
04 instruction_2

b. Principe
Si la valeur de l’expression est vraie alors le bloc d’instruction instruction_1 est exécuté sinon le
bloc d’instruction instruction_2 est exécuté.

c. Exemple
Ecrire un programme qui permet de vérifier le nombre de solutions d’une équation de second degré.

Listing 1.12 : Nombre de solutions d’une équation de second degré


01 #include<iostream>
02 using namespace std;
03 int main()
04 {
05 double a, b, c;
06 double delta = b * b – 4 * a * c;
07 if (delta > 0)
08 cout << “L equation admet deux solutions” << endl;
09 else if (delta == 0)
10 cout << “L equation admet une solution double” << endl;
11 else
12 cout << “L equation n admet pas de solutions” << endl;
13 return 0;
14 }

9.1.3. Structures Alternatives multiples

a. Syntaxe de l’instruction alternative multiple

8
Listing 1.10 : Programme C++ «Hello World»
01 Switch <variable de choix>
02 {
03 case choix 1: <Séquence 1>; break;
04 case choix 2: <Séquence 2>; break;
05 …
06 case choix n: <Séquence n>; break;
07 default: <Séquence par défaut>
08 }

b. Principe
La valeur de la variable de choix est évaluée,

• Si elle est égale à choix 1, la séquence 1 est exécutée.


• Si elle est égale à choix 2, la séquence 2 est exécutée.
• Idem jusqu’au choix n.
• Si la valeur de la variable du choix n’est égale à aucun choix, le bloc par défaut sera exécuté.

9.2. Traitement répétitif


9.2.1. Boucle for

a. Syntaxe de la boucle for

Listing 1.11 : Syntaxe de la boucle for


01 for (<initialisation>; <condition>; <compteur>)
02 {
03 <Séquence>;
04 }

b. Principe
<initialisation> : traitée à la première itération, elle consiste en l’initialisation d’une ou de plusieurs
variables.
<condition> : définit la condition d’arrêt de la boucle, cette condition est tester à chaque itération.
<compteur> : Détermine le pas ou les instructions à exécuter à la fin de chaque itération, cette partie
est exécutée à la fin de chaque itération avant le test de la condition.
c. Exemple.
Afficher les nombres pairs strictement inférieurs à 200.
Listing 1.12 : Nombre pairs strictement inférieurs à 200
01 #include<iostream>
02 using namespace std;
03 int main()
04 {
05 for (int i=0; i<200; i=i+2)
06 cout << i << endl;
07 return 0;
08 }

d. Exercice.
Ecrire un programme qui permet d’évaluer 1 + !
+
!
+
!
+ ⋯+ ( . En utilisant la boucle for.
)!

9
9.2.2. Boucle while

a. Syntaxe de la boucle while

Listing 1.13 : Syntaxe de la boucle while


01 while (<condition>)
02 {
03 <Séquence>;
04 }

b. Principe
Tant que la condition est vrai, la séquence d’instruction est exécutée, et lorsque la condition devient
fausse la réexécution de la boucle est arrêtée.
c. Exemple.
Ecrire un programme qui permet d’afficher tous les multiples de 3 inférieurs à 200.

Listing 1.14 : Multiples de 3 strictement inférieurs à 200


01 #include<iostream>
02 using namespace std;
03 int main()
04 {
05 int i = 0;
06 while (i < 200)
07 if (i % 3 == 0)
08 cout << i << endl;
09 return 0;
10 }

d. Exercice.

Ecrire un programme C++ qui permet d’évaluer 1 − + + ⋯ + (−1) en utilisant la boucle


while.

9.2.3. Boucle do … while

a. Syntaxe de la boucle do … while


Listing 1.15 : Syntaxe de la boucle while
01 do{
02 <Séquence>;
03 } while (<condition>)

b. Principe.
Le bloc d’instruction est exécuté une fois, ensuite, tant que la condition est vrai, la séquence
d’instruction est exécutée, et lorsque la condition devient fausse, la réexécution de la boucle est arrêtée.
c. Exercice.
Ecrire un programme C++ qui permet d’évaluer 1 + + + ⋯+ en utilisant la boucle do …
while.

10

Vous aimerez peut-être aussi