Vous êtes sur la page 1sur 37

C++

1 - Introduction au C++
Le C++ est un langage de programmation de haut niveau, compilé, généraliste et orienté objet. Il a été créé par Bjarne Stroustrup au début des années 1980, à
partir du langage C.

Le C++ est un langage puissant et flexible, qui offre une gamme de fonctionnalités avancées et des performances élevées. Il est souvent utilisé pour développer
des applications à hautes performances, telles que les systèmes d'exploitation, les logiciels d'ingénierie et les jeux vidéo.

Voici un résumé des principales caractéristiques du C++ :

● Programmation orientée objet : Le C++ permet de programmer en utilisant la programmation orientée objet, qui est une approche plus structurée et
modulable de la programmation.
● Fonctionnalités avancées : Le C++ offre une gamme de fonctionnalités avancées, telles que la surcharge d'opérateurs, les templates et la gestion
d'exceptions.
● Performances : Le C++ est un langage performant, qui peut être utilisé pour développer des applications à hautes performances.
2 - Introduction au C++
Voici un résumé plus détaillé de chaque point :

1. Programmation orientée objet

La programmation orientée objet (POO) est une approche de la programmation qui permet de modéliser le monde réel en utilisant des objets. Chaque objet a son propre état et comportement.

Le C++ prend en charge la POO en fournissant des classes, des objets, l'héritage, le polymorphisme et l'encapsulation.

● Les classes sont des modèles qui définissent les propriétés et les comportements d'un objet.
● Les objets sont des instances de classes.
● L'héritage permet aux classes de partager des propriétés et des comportements.
● Le polymorphisme permet aux objets de différentes classes d'être traités de la même manière.
● L'encapsulation permet de cacher les détails de mise en œuvre des objets.
3 - Introduction au C++
2. Fonctionnalités avancées

Outre la POO, le C++ offre une gamme de fonctionnalités avancées, telles que :

● La surcharge d'opérateurs permet de définir des comportements personnalisés pour les opérateurs.
● Les templates permettent de créer des fonctions et des classes génériques qui peuvent être utilisées avec différents types de données.
● La gestion des exceptions permet de traiter les erreurs de manière structurée.

3. Performances

Le C++ est un langage performant, qui peut être utilisé pour développer des applications à hautes performances. Cela est dû au fait que le C++ est un langage compilé, ce qui signifie que le code C++
est converti en code machine avant d'être exécuté.

Conclusion

Le C++ est un langage de programmation puissant et flexible, qui offre une gamme de fonctionnalités avancées et des performances élevées. Il est souvent utilisé pour développer des applications à
hautes performances, telles que les systèmes d'exploitation, les logiciels d'ingénierie et les jeux vidéo.
4 - Introduction au C++
Installation et configuration de l'environnement de développement C++

Pour développer des applications C++, il est nécessaire d'installer un compilateur et un IDE.

Compilateurs

Un compilateur est un logiciel qui convertit le code source C++ en code machine, qui peut ensuite être exécuté par l'ordinateur.

● GCC est un compilateur open source largement utilisé.


● Clang est un compilateur open source qui est souvent considéré comme plus rapide que GCC.
● MSVC est un compilateur fourni par Microsoft et est la norme pour le développement C++ sur Windows.
5 - Introduction au C++
IDEs

Un IDE est un environnement de développement intégré qui fournit des outils pour écrire, compiler et déboguer du code.

● Visual Studio est un IDE commercial de Microsoft qui est la norme pour le développement C++ sur Windows.
● CLion est un IDE open source de JetBrains qui est spécialisé pour le C++.
● Code::Blocks est un IDE open source léger pour le C++.
● Eclipse CDT est une version de l'IDE Eclipse axée sur le C/C++.

Installation

Le processus d'installation varie selon le système d'exploitation et l'outil choisi.

● Sur les systèmes Linux, les packages sont généralement disponibles via les gestionnaires de paquets.
● Sur Windows, des installateurs sont souvent fournis.
● Sur MacOS, des outils comme Homebrew peuvent faciliter l'installation.
6 - Introduction au C++
Pour installer un environnement de développement C++, il suffit de télécharger et d'installer un compilateur et un IDE. Le choix du compilateur et de l'IDE dépend des besoins et des préférences de
l'utilisateur.

Résumé plus concis

Pour développer des applications C++, il faut installer un compilateur et un IDE.

● Les compilateurs convertissent le code source C++ en code machine.


● Les IDEs fournissent des outils pour écrire, compiler et déboguer du code.

Les compilateurs et IDEs les plus populaires sont :

● Compilateurs : GCC, Clang, MSVC


● IDEs : Visual Studio, CLion, Code::Blocks, Eclipse CDT

L'installation varie selon le système d'exploitation. Notre choix est basé sur le Code::Blocks
1 - Les bases du C++
Structure d'un programme C++:

● Organisation:
● Un programme C++ est constitué d'une ou plusieurs fonctions. La fonction main() est le point d'entrée de l'exécution.
● Les programmes sont structurés en en-têtes (headers) et fichiers sources.
● Exemple de structure:

#include <iostream> // Inclusion d'un en-tête

int main() {

cout << "Hello, World!" << endl;

return 0;

}
2 - Les bases du C++
Espaces de noms (namespace):

● Définition: Un espace de noms est une région qui permet de grouper des identificateurs (noms de variables, types, fonctions, etc.) afin d'éviter les conflits de nommage.
● Utilisation: L'espace de noms std est utilisé pour la STL (Standard Template Library). Il englobe des fonctionnalités telles que les opérations d'entrée/sortie et les conteneurs.
● Exemple:

using namespace std; // permet d'utiliser les éléments de l'espace de noms sans préfixe ""

Entrée/sortie en C++ avec <iostream>:

● Composants principaux:
● cin: pour l'entrée standard (clavier généralement).
● cout: pour la sortie standard (écran généralement).
● cerr: pour la sortie d'erreurs.
● clog: pour les logs.
● Exemple d'utilisation:

int age;
cout << "Entrer votre age: ";
cin >> age;
cout << "Vous avez " << age << " ans." << endl;
2 - Passage du C au C++
Différences syntaxiques:
● Commentaires: C++ supporte les commentaires de ligne avec // en plus des commentaires de bloc /* */ du C.
● Déclaration de types: En C++, les types peuvent être déclarés n'importe où dans le code, contrairement au C où ils doivent être déclarés au début d'un bloc.

La mémoire en C++: allocation dynamique avec new et delete:


● Différence avec C: Au lieu de malloc() et free() en C, C++ utilise new pour allouer et delete pour libérer.
● Exemple:

int* p = new int; // alloue un entier


*p = 5; // assigne 5 à l'entier
delete p; // libère la mémoire

● Pour les tableaux:

int* arr = new int[10]; // alloue un tableau de 10 entiers


delete[] arr; // libère la mémoire du tableau
3 - Passage du C au C++
Références versus pointeurs:

● Références:
● Une référence est un alias pour une variable existante. Elle doit être initialisée lors de sa déclaration et ne peut pas être réaffectée.
● Utilisée pour la surcharge d'opérateurs, les fonctions, etc.
● Pointeurs:
● Un pointeur stocke l'adresse d'une variable. Peut pointer vers NULL ou être réaffecté.
● Exemple:

int x = 5;
int& ref = x; // ref est une référence à x
int* ptr = &x; // ptr est un pointeur vers x

Ces sections fournissent un aperçu général des bases du C++ et des différences entre C et C++. Chaque sujet peut être exploré plus en profondeur avec des exemples, des exercices pratiques et des
démonstrations pour une compréhension complète.
Exercice d’application
Exercice 1 : Affichage et saisie

Objectif : Familiarisez-vous avec l'affichage et la saisie de base.

Consignes :
1. Demandez à l'utilisateur son nom et son âge.
2. Affichez un message de bienvenue personnalisé en utilisant son nom.
3. Indiquez également combien d'années il lui reste avant d'atteindre 100 ans.

Exercice 2 : Concaténation lors de l'affichage

Objectif : Pratiquez la concaténation de chaînes lors de l'affichage.

Consignes :
1. Demandez à l'utilisateur son prénom, son nom et sa profession.
2. Affichez une phrase complète comme "Bonjour, [prénom] [nom]! Vous êtes un(e) [profession] impressionnant(e)!"

Exercice 3 : Calcul du périmètre et de l'aire d'un cercle

Objectif : Utilisez les opérateurs arithmétiques pour des formules géométriques.

Consignes :
1. Demandez à l'utilisateur de saisir le rayon d'un cercle.
2. Calculez le périmètre (2 * pi * rayon) et l'aire (pi * rayon^2) du cercle.
3. Affichez les résultats.
Exercice d’application
Exercice 4 : Conversion de monnaie

Objectif : Utilisez les opérateurs arithmétiques dans un contexte pratique.

Consignes :
1. Demandez à l'utilisateur le montant en euros qu'il souhaite convertir.
2. Convertissez ce montant en F CFA(en supposant un taux de conversion fixe, par exemple 1 euro = 655.50 F CFA).
3. Affichez le montant équivalent en F CFA.

Exercice 5 : Calcul de l'IMC (Indice de Masse Corporelle)

Objectif : Utiliser des formules et pratiquer les opérations arithmétiques.

Consignes :
Demandez à l'utilisateur son poids (en kilogrammes) et sa taille (en mètres).
Calculez l'IMC avec la formule : IMC = poids / (taille * taille).
Affichez l'IMC calculé.

Exercice 6 : Conversion de secondes

Objectif : Divisez un grand nombre de secondes en heures, minutes et secondes.

Consignes :
Demandez à l'utilisateur de saisir un nombre de secondes (par exemple 3665 secondes).
Convertissez ce nombre total en heures, minutes et secondes (dans l'exemple, cela donnerait 1 heure, 1 minute et 5 secondes).
Affichez le résultat sous la forme : "1 heure(s) 1 minute(s) 5 seconde(s)".
COLLECTIONS
Collections
1. Array (Tableau) :
- Un tableau en C++ est une collection de variables du même type, stockées en mémoire de manière contiguë. Il a une taille fixe, déterminée au moment de sa
création. L'accès à ses éléments se fait via un index, qui commence à zéro.

2. Vector (Vecteur) :
- Un vecteur en C++ est similaire à un tableau, mais avec la capacité de changer dynamiquement de taille. Il permet d'ajouter ou de supprimer des éléments à la
fin de la collection. Les vecteurs gèrent la mémoire automatiquement et peuvent s'agrandir au besoin.

3. List (Liste) :
- Une liste en C++ est une collection d'éléments organisés de manière séquentielle. Contrairement aux vecteurs, les listes sont implémentées comme des listes
chaînées, ce qui permet des insertions et des suppressions rapides n'importe où dans la liste. Cependant, l'accès direct à un élément par son index est plus lent que
dans un vecteur.

4. Set (Ensemble) :
- Un ensemble en C++ est une collection qui stocke des éléments uniques dans un ordre spécifique. Les éléments dans un ensemble sont automatiquement triés et
ne peuvent pas être modifiés une fois insérés. C'est utile pour stocker un groupe d'éléments distincts et pour effectuer des opérations comme l'union, l'intersection,
et la différence.

5. Map (Carte) :
- Une carte en C++ est une collection d'associations clé-valeur. Chaque clé est unique et est associée à une valeur. Les maps sont souvent utilisées pour accéder
rapidement à une valeur en utilisant sa clé correspondante. Comme les sets, les éléments dans une map sont triés par clé.

Ces collections sont fondamentales en C++ et sont utilisées pour stocker et manipuler des groupes d'éléments de manière efficace, chacune ayant ses propres
avantages et utilisations spécifiques.
Collections (déclaration)
array
#include <array>
array<int, 5> monArray; // Déclare un array d'entiers avec 5 éléments

vector
#include <vector>
vector<int> monVecteur; // Déclare un vecteur d'entiers

list
#include <list>
list<int> maListe; // Déclare une liste d'entiers

set
#include <set>
set<int> monEnsemble; // Déclare un ensemble d'entiers

map
#include <map>
map<string, int> maCarte; // Déclare une map avec des clés de type string et des valeurs de type int
Collections (array ex: saisie et affichage)
#include <iostream>
#include <array>

using namespace std;

int main() {
array<int, 5> monArray;
for (int i = 0; i < 5; i++) {
cout << "Entrez l'élément " << (i + 1) << ": ";
cin >> monArray[i];
}

cout << "Vous avez saisi les éléments suivants: ;


"
for (int i = 0; i < 5; i++) {
cout << monArray[i] << " ";
}
cout << endl;

return 0;
}
Collections (vector ex: saisie et affichage)
#include <iostream>
#include <vector>

using namespace std;

int main() {
vector<int> monVecteur;
int temp;
for (int i = 0; i < 5; i++) {
cout << "Entrez l'élément " << (i + 1) << ": ";
cin >> temp;
monVecteur.push_back(temp);
}

cout << "Vous avez saisi les éléments suivants: ";


for (int i = 0; i < 5; i++) {
cout << monVecteur[i] << " ";
}
cout << endl;

return 0;
}
Collections (list ex: saisie et affichage)
#include <iostream>
#include <list>

using namespace std;

int main() {
list<int> maListe;
int temp;
for (int i = 0; i < 5; i++) {
cout << "Entrez l'élément " << (i + 1) << ": ";
cin >> temp;
maListe.push_back(temp);
}

cout << "Vous avez saisi les éléments suivants: ";


for (auto element : maListe) {
cout << element << " ";
}
cout << endl;

return 0;
}
Collections (set ex: saisie et affichage)
#include <iostream>
#include <set>

using namespace std;

int main() {
set<int> monEnsemble;
int temp;
for (int i = 0; i < 5; i++) {
cout << "Entrez l'élément " << (i + 1) << ": ";
cin >> temp;
auto result = monEnsemble.insert(temp);
while (!result.second) {
cout << "Élément déjà existant. Veuillez saisir un élément unique: ";
cin >> temp;
result = monEnsemble.insert(temp);
}
}

cout << "Vous avez saisi les éléments suivants: ";


for (auto element : monEnsemble) {
cout << element << " ";
}
cout << endl;

return 0;
}
Collections (map ex: saisie et affichage)
#include <iostream>
#include <map>
#include <string>

using namespace std;

int main() {
map<string, int> maCarte;
string cle;
int valeur;
for (int i = 0; i < 5; i++) {
cout << "Entrez la clé pour l'élément " << (i + 1) << ": ";
cin >> cle;
cout << "Entrez la valeur pour l'élément " << (i + 1) << ": ";
cin >> valeur;
maCarte[cle] = valeur;
}

cout << "Vous avez saisi les paires clé/valeur suivantes: " << endl;
for (const auto &paire : maCarte) {
cout << paire.first << ": " << paire.second << endl;
}

return 0;
}
Collections en C++ array
Les array en C++ sont une partie de la bibliothèque standard et présentent une alternative moderne aux tableaux traditionnels. Voici une explication détaillée de ce
qu'ils sont, pourquoi les utiliser, leurs différences avec les tableaux traditionnels, et les différentes façons de les déclarer.

Définition des Arrays en C++

● Qu'est-ce qu'un array?


● Un array est un conteneur de taille fixe qui encapsule un tableau de taille fixe.
● Il offre des fonctionnalités de la bibliothèque standard telles que les itérateurs, la taille, et des méthodes pour l'accès aux éléments.

Pourquoi Utiliser les array

● Sécurité de Type :
● Fournit une sécurité de type améliorée par rapport aux tableaux traditionnels.
● Compatibilité avec la Bibliothèque Standard :
● S'intègre bien avec d'autres composants de la bibliothèque standard comme les algorithmes et les itérateurs.
● Performance :
● Offre des performances similaires aux tableaux traditionnels car il s'agit essentiellement d'une fine couche au-dessus de ces derniers.
Collections en c++ array
Différences avec les Tableaux Traditionnels

● Fonctionnalités :
● Les array fournissent des méthodes comme .size(), .begin(), .end(), qui ne sont pas disponibles avec les tableaux traditionnels.
● Sécurité :
● Plus sûr à utiliser, car il empêche certaines erreurs courantes comme les débordements de tampons.
● Passage en Argument :
● Lorsqu'ils sont passés à une fonction, les array ne se décomposent pas en pointeurs, contrairement aux tableaux traditionnels.
Collections en c++ array
Différentes Types de Déclarations avec Exemples

1. Déclaration Basique

array<int, 5> arr; // Un array de 5 entiers

2. Initialisation avec Liste d'Initialisation

array<int, 5> arr = {1, 2, 3, 4, 5}; // Initialisation avec des valeurs spécifiques

3. Copie et Affectation

array<int, 5> arr1 = {1, 2, 3, 4, 5};

array<int, 5> arr2 = arr1; // Copie arr1 dans arr2


Collections en c++ array
4. Utilisation des Itérateurs

array<int, 5> arr = {1, 2, 3, 4, 5};

for (auto it = arr.begin(); it != arr.end(); ++it) {

cout << *it << " "; // Parcours avec itérateurs

5. Accès aux Éléments

array<int, 5> arr = {1, 2, 3, 4, 5};

cout << arr[2]; // Accès à l'élément à l'indice 2

cout << arr.at(2); // Accès sécurisé à l'élément à l'indice 2


Collections en c++ array
Les array en C++ sont équipés de plusieurs méthodes utiles qui ne sont pas disponibles avec les tableaux traditionnels. Ces méthodes rendent array plus puissant et
facile à utiliser. Voici quelques-unes de ces fonctionnalités clés :
1. .size()
Fonction : Renvoie le nombre d'éléments dans l'array.
Utilisation : Très utile pour savoir combien d'éléments le conteneur contient, sans avoir besoin de garder une trace séparée de cette information.
Exemple :

array<int, 5> arr = {1, 2, 3, 4, 5};


cout << "Le nombre d'éléments dans arr est : " << arr.size() << endl;

2. .begin() et .end()
Fonction :
begin() renvoie un itérateur pointant vers le premier élément de l'array.
- .end() renvoie un itérateur pointant juste après le dernier élément de l'array.
Utilisation : Ces méthodes sont principalement utilisées pour parcourir l'array avec des boucles basées sur les itérateurs. Elles sont également compatibles avec de
nombreuses fonctions de la bibliothèque standard qui prennent des itérateurs comme arguments.
Exemple :

array<int, 5> arr = {1, 2, 3, 4, 5};


for (auto it = arr.begin(); it != arr.end(); it++)
{
cout << *it << " ";
}
Exercice d’application
Exercice 1 : Somme des Éléments d'un array

Énoncé : Écrivez un programme en C++ qui crée un array d'entiers, le remplit avec des valeurs saisies par l'utilisateur, puis calcule et affiche la somme de ces
valeurs.

Exercice 2 : Inverser un array

Énoncé : Écrivez un programme qui prend un array d'entiers, le remplit avec des valeurs, puis inverse l'ordre de ses éléments.

Exercice 3 : Trouver le Maximum dans un array

Énoncé : Créez un programme qui initialise un array avec des valeurs entières, puis trouve et affiche la valeur maximale.

Exercice 4 : Compter les Éléments Supérieurs à un Seuil

Énoncé : Écrivez un programme en C++ qui initialise un array avec des valeurs, puis compte et affiche le nombre d'éléments qui sont supérieurs à une valeur seuil
donnée.

Exercice 5 : Vérifier si un Tableau est Trié

Énoncé : Créez un programme en C++ qui vérifie si un array d'entiers est trié dans l'ordre croissant et affiche un message approprié.
Corrigé exo 1
#include <iostream>
#include <array>
using namespace std;
int main()
{
array<int, 5> arr;
int somme = 0;

cout << "Entrez 5 entiers :" << endl;


for (int i = 0; i < 5; i++)
{
cin >> arr[i];
}

for (int num : arr)


{
somme += num;
}

cout << "La somme des éléments est : " << somme << endl;

return 0;
}
Corrigé exo 2
#include <iostream>
#include <array>

using namespace std;

int main() {
array<int, 5> arr;

cout << "Entrez 5 entiers :" << endl;


for (int i = 0; i < 5; ++i) {
cin >> arr[i];
}

for (int i = 0; i < arr.size() / 2; ++i) {


int temp = arr[i];
arr[i] = arr[arr.size() - 1 - i];
arr[arr.size() - 1 - i] = temp;
}

cout << "Array inversé :" << endl;


for (int num : arr) {
cout << num << " ";
}
cout << endl;

return 0;
}
Corrigé exo 2 bis
#include <iostream>
#include <array>
#include <algorithm> // Pour utiliser la fonction reverse

using namespace std;

int main() {
array<int, 5> arr;

cout << "Entrez 5 entiers :" << endl;


for (int i = 0; i < 5; ++i) {
cin >> arr[i];
}

reverse(arr.begin(), arr.end());

cout << "Array inversé :" << endl;


for (int num : arr) {
cout << num << " ";
}
cout << endl;

return 0;
}
Corrigé exo 3
#include <iostream>
#include <array>

using namespace std;

int main() {
array<int, 5> arr;

cout << "Entrez 5 entiers :" << endl;


for (int i = 0; i < 5; ++i) {
cin >> arr[i];
}

int maxVal = arr[0];


for (int i = 1; i < 5; ++i) {
if (arr[i] > maxVal) {
maxVal = arr[i];
}
}

cout << "La valeur maximale est : " << maxVal << endl;

return 0;
}
Corrigé exo 3 bis
#include <iostream>
#include <array>
#include <algorithm> // Pour utiliser la fonction max_element

using namespace std;

int main() {
array<int, 5> arr;

cout << "Entrez 5 entiers :" << endl;


for (int i = 0; i < 5; ++i) {
cin >> arr[i];
}

auto maxElement = max_element( arr.begin(), arr.end());

cout << "L'élément maximum est : " << *maxElement << endl;
return 0;
}
Corrigé exo 4
#include <iostream>
#include <array>

using namespace std;

int main() {
array<int, 5> arr = {10, 20, 30, 40, 50};
int seuil = 25;
int compte = 0;

for (int num: arr) {


if (num > seuil) {
++ compte;
}
}

cout << "Nombre d'éléments supérieurs à " << seuil << " : " << compte << endl;

return 0;
}
Corrigé exo 5
#include <iostream>
#include <array>

using namespace std;

int main() {
array<int, 5> arr;

cout << "Entrez 5 entiers :" << endl;


for (int i = 0; i < 5; ++i) {
cin >> arr[i];
}

bool estTrie = true;


for (int i = 0; i < 4; ++i) {
if (arr[i] > arr[i + 1]) {
estTrie = false;
break;
}
}

if (estTrie ) {
cout << "Le tableau est trié en ordre croissant." << endl;
} else {
cout << "Le tableau n'est pas trié en ordre croissant." << endl;
}

return 0;
}
Corrigé exo 5 bis
#include <iostream>
#include <array>
#include <algorithm> // Pour utiliser la fonction is_sorted

using namespace std;

int main() {
array<int, 5> arr;

cout << "Entrez 5 entiers :" << endl;


for (int i = 0; i < 5; ++i) {
cin >> arr[i];
}

bool estTrie = is_sorted(arr.begin(), arr.end());

if (estTrie) {
cout << "Le tableau est trié." << endl;
} else {
cout << "Le tableau n'est pas trié." << endl;
}

return 0;
}
Les fonctions de array
Fonctions de Base

at()
● Accède à un élément spécifique avec vérification des limites.
● Exemple : arr.at(2)
operator[]
● Accède à un élément spécifique sans vérification des limites.
● Exemple : arr[2]
front()
● Accède au premier élément.
● Exemple : arr.front()
back()
● Accède au dernier élément.
● Exemple : arr.back()
Les fonctions de array
Fonctions de Taille et de Capacité

size()
● Retourne le nombre d'éléments dans l'array.
● Exemple : arr.size()
max_size()
● Retourne la taille maximale possible de l'array, identique à size() dans ce cas.
● Exemple : arr.max_size()
empty()
● Vérifie si le conteneur est vide (toujours false pour array car il a une taille fixe).
● Exemple : arr.empty()

Vous aimerez peut-être aussi