
Le langage C++
C++ a été créé en 1983 par Bjarne Stroustrup. Il est basé sur le langage C. La version C++20 est sortie en décembre 2020.
C++ est un langage de programmation compilé, portable, de moyen niveau et reconnu pour sa rapidité d'exécution. Il est sensible à la casse. Il a un typage statique nomminatif. Il est multi-paradigme et connu pour la programmation orientée objet.
C++ est populaire et a de nombreuses bibliothèques. Il est par exemple utilisé pour le développement de logiciels, de jeux, de systèmes embarqués.
Commencer
Prérequis avant de commencer
Dans ce chapitre, nous allons voir comment installer l'IDE, tester notre première programme et écrire des commentaires.
Environnement
Mon environnement de développement
IDE Code::Blocks sous Windows 10 Lien pour installer Code::Blocks (Attention, choisir codeblocks-xxxmingw-setup.exe) Pour créer un projet: File\New\Project\Console application\C++ nom du projet puis options par défaut → main.cpp
Mon premier programme
Hello world
La directive #include <iostream> permet de charger la bibliothèque standard iostream pour lire et écrire des messages à l'écran. La directive #include <string> permet de charger la bibliothèque standard iostream pour lire et écrire des messages à l'écran. La commande namespace std permet de définir l'espace de nom standard. La fonction int main() { mon_code } définit la fonction principale du programme. L'objet cout permet d'afficher un message à l'écran. Le manipulateur endl effectue un retour à la ligne. L'instruction return 0 indique que le code s'est terminé sans erreur.
-
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 cout << "Hello world!" << endl; 6 return 0; 7 }
-
Hello world!
Les commentaires
Il y a deux moyens pour rajouter des commentaires.
-
1 // Une ligne de commentaires 2 /* 3 Commentaire 4 sur plusieurs lignes 5 */
Remarque
Pour la suite, seul le core de la fonction principale, sans le return, sera affiché dans les codes exemples.
Les variables
Pour déclarer une variable on renseigne son type suivi de son nom et de sa valeur entre parenthèses
Les nombres
Les nombres peuvent être principalement de type int, unsigned int, float et double.
Le type double apporte plus de précision ou sert pour les grands nombres. Il est possible de faire les opérations usuelles addition, soustraction, multiplication, division et modulo. Les signes ++ et -- permettent d'incrémenter et de décrémenter de 1. Les signes +=, -=, *= et /= permettent de faire une opération sur un nombre. Au début du code, on ajoute la directive #include <cmath> pour avoir accès aux fonctions mathématiques telles que pow, sin, exp ou floor.
-
1 int age(44); 2 unsigned int carre(4); 3 float prix(99.99); 4 double pi(3.14159); 5 cout << "Il a " << age << " ans." << endl; 6 int a(2), b(3), c(4), res; 7 res = (a + b - c) * c / a % b; 8 cout << "Resultat = " << res << endl; 11 cout << "age = " << --age << endl; 12 age+=1; 13 cout << "age = " << age << endl; 14 cout << "4^0.5 = " << sqrt(4)<< endl; 15 cout << "2^3 = " << pow(2,3)<< endl; 16 cout << "sin(pi/2) = " << sin(pi/2) << endl; 17 cout << "cos(pi) = " << cos(pi) << endl; 18 cout << "tan(0) = " << tan(0) << endl; 19 cout << "exp(10) = " << exp(10) << endl; 20 cout << "log(100) = " << log10(100) << endl; 22 cout << "abs(-2) = " << fabs(-2) << endl; 23 cout << floor(pi) << " < pi < " << ceil(pi) << endl;
-
Il a 44 ans. Resultat = 2 age = 43 age = 44
Le texte
Le texte peut être de type char ou string
Au début du code, on ajoute l'en-tête standard <string> pour traiter les chaines de caractères avec la directive #include <string>
-
1 char lettre('a'); 2 string message("Bonjour tout le monde!"); 3 cout << "La lettre \"" << lettre << "\" n'est pas dans le message \"" << message << "\"." << endl;
-
La lettre "a" n'est pas dans le message "Bonjour tout le monde!".
Les booléens
Un booléen peut prendre la valeur true (renvoie 1) ou false (renvoie 0)
-
1 bool choix(true); 2 cout << "Le booleen true vaut " << choix << "." << endl;
-
Le booleen true vaut 1.
L'affectation
Le caractère = permet d'affecter une valeur à une variable.
Pour les nombres et les booléens, il est possible de changer la valeur d'une variable. Le terme const permet de définit une constante. Elle ne peut pas être modifiée.
-
1 int temp (21.5); 2 temp = 22.5; 3 cout << "Maintenant, il fait " << temp << " degres." << endl; 4 string message2; 5 message2 = message; 6 cout << "La lettre \"" << lettre << "\" n'est pas non plus dans le message2 \"" << message2 << "\"." << endl; 7 float const phi(1.618); 8 cout << "valeur de phi?" << endl; 9 cout << "Le nombre d'or vaut " << phi << endl;
-
Maintenant, il fait 22 degrés. La lettre "a" n'est pas non plus dans le message2 "Bonjour tout le monde!". Le nombre d'or vaut 1.618
Les références
Une référence est une sorte d'alias.
Le caractère & permet de créer une référence à une variable.
La variable et la référence sont donc liées à la même case mémoire.
-
1 int age(44); 2 int& reference_age(age); 3 cout << "Il a " << reference_age << " ans." << endl;
-
Il a 44 ans.
Input utilisateur
L'objet cin et la fonction getline
L'objet cin permet à l'utilisateur de saisir une valeur et de l'affecter à une variable.
La fonction getline permet de lire une chaine de caractère séparée par des espaces
-
1 int note(0); 2 cout << "Rentrer une note sur 20: "; 3 cin >> note; 4 cout << "Il a " << note << " sur 20." << endl; 5 cin.ignore(); 6 cout << "Comment t'appelles tu?" << endl; 7 string nom_complet(""); 8 getline(cin, nom_complet); 9 cout << "Bonjour " << nom_complet << "."<< endl;
-
Rentrer une note sur 20: 12 Il a 12 sur 20. Comment t'appelles tu? nico tm Bonjour nico tm.
Les conditions
Une structure conditionnelle est basée sur un test conditionnel et sur les instructions if ou switch.
Le test conditionnel
Les opérateur de comparaison ==, >, >=, <, <= et != servent à faire le test conditionnel qui est placé entre parenthèses.
Le test renvoie 1 pour vrai et 0 pour faux. Il en va de même pour une variable bouleenne qui renvoie 1 si true et 0 si faux. Les opérateurs logiques and ou &&, or ou || et not ou ! permettent de combiner les conditions.
-
1 cout << (1 == 1) << endl; 2 cout << (1 != 1) << endl;
-
1 0
L'instruction if
if, else if, else
La structure conditionnelle if s'écrit if (condition) {instructions} else if (condition) {instructions} else {instructions}
-
1 age = 25; 2 cout << "age = " << age << endl; 3 if (age < 18){cout << "mineur" << endl;} 4 else if (age == 18){cout << "majorite" << endl;} 5 else if (age < 30){cout << "jeune" << endl;} 6 else{cout << "vieux" << endl;}
-
jeune
-
1 choix = true; 2 if (choix){cout << "go" << endl;} 3 else if (!choix){cout << "no go" << endl;}
-
go
-
1 choix = true; 2 age = 18; 3 if (choix and age == 18){cout << "vote" << endl;}
-
vote
L'intruction switch
La structure conditionnelle switch s'écrit switch(variable) {case valeur1: instructions; break; ...}
Elle peut s'utiliser avec int, unsigned int et char.
-
1 int score(2); 2 switch(score){ 3 case 0: cout << "nul" << endl; break; 4 case 1: cout << "moyen" << endl; break; 5 case 2: cout << "parfait" << endl; break; 6 }
-
parfait
Les boucles
Les boucles for, while et do while
La boucle for
Elle est effectuée un nombre prédéfini de fois.
Elle s'écrit for (initialisation; condition; incrementation) {instructions}
-
1 int i(0); 2 for (i = 0 ; i < 3 ; i++) {cout << i << endl;}
-
0 1 2
La boucle while
Elle est effectuée un nombre indéfini de fois.
Elle s'écrit while (condition) {instructions}
-
1 int choix_menu(1); 2 while (choix_menu != 2) { 3 cout << "Menu" << endl << "1 pour continuer" << endl << "2 pour quitter" << endl; 4 cin >> choix_menu; 5 cout << "Bye" << endl;
-
Menu 1 pour continuer 2 pour quitter 2 Bye
La boucle do while
Elle est effectuée au moins une fois.
Elle s'écrit do {instructions} while (condition)
-
1 choix_menu = 0; 2 do { 3 cout << "Menu" << endl << "1 pour continuer" << endl << "2 pour quitter" << endl; 4 cin >> choix_menu; 5 } while (choix_menu != 2) 6 cout << "Bye" << endl;
-
Menu 1 pour continuer 2 pour quitter 2 Bye
Les fonctions
Une fonction permet d'effectuer une tâche.
Exemple d'utilisation
Une fonction s'écrit type_valeur_retour nom_fonction (arguments){instructions}
La fonction à appeler calcule_carre se trouve avant la fonction main.
La fonction say_hello de type valeur void ne renvoie rien.
-
1 #include <iostream> 2 using namespace std; 3 4 int calcule_carre(int x){ 5 { 6 int res(x * x); 7 return res; 8 } 9 10 void say_hello(string name) 11 {cout << "hello " << name;} 12 13 int main() 14 { 15 int x(2), res(0); 16 res = calcule_carre(x); 17 cout << x << " au carre = " << res << endl; 18 say_hello ("nico"); 19 return 0; 20 }
-
2 au carre = 4 hello nico
Les tableaux
Un tableau permet de stocker des données du même
Les tableaux statiques
Leur taille est fixée à l'avance
Un tableau s'écrit type_valeur nom [nb_cases] avec nb_cases fixe. D'ailleurs, il est fortement conseillé que nb_cases soit une constante.
-
1 int const nb_scores(3); 2 double scores[nb_scores]; 3 scores[0] = 12; 4 scores[1] = 14; 5 scores[2] = 16; 6 cout << "scores = " << scores << endl; 7 for (i = 0; i < 3 ; i++){cout << scores[i] << endl;}
-
12 14 16
Pour définir la fonction moyenne avec le tableau scores en argument, il faut aussi passer nb_scores en argument.
-
1 // fonction moyenne 2 double moyenne(double scores[], int nb_scores) 3 { 4 double moyenne(0); 5 for(int i(0); i < 3 ; i++){moyenne += scores[i]} 6 moyenne /= nb_scores; 7 return moyenne; 8 } 9 // dans le main 10 double ma_moyenne(0); 11 ma_moyenne = moyenne(scores, nb_scores); 12 cout << "moyenne = " << ma_moyenne << endl;
-
moyenne = 14
Les vecteurs
Les vecteurs sont comme des tableaux mais avec une taille variable.
Un vecteur s'écrit vector
-
1 vector
temperature(3, 0); 2 temperature[1] = 18.6; 3 temperature[2] = 20.2; 4 temperature.push_back(16.4); 5 temperature.pop_back(); 7 temperature.erase(temperature.begin()); 6 for(i=0; i 8 9
-
18.6 20.2
La fonction moyenne_temp reçoit le vecteur temperature en argument avec const& pour le passage en référence constante.
-
1 // fonction calcule_moyenne_temp 2 double calcule_moyenne_temp(vector<double> const& temperature) 3 { 4 double moyenne_temp(0); 5 for(int i(0); i < temperature.size() ; i++){moyenne_temp += temperature[i];} 6 moyenne_temp /= temperature.size(); 7 return moyenne_temp; 8 } 9 // dans le main 10 double moyenne_temp(0); 11 moyenne_temp = calcule_moyenne_temp(temperature); 12 cout << "moyenne_temp = " << moyenne_temp << endl;
-
moyenne_temp = 19.4