Académique Documents
Professionnel Documents
Culture Documents
Dispensé par :
Jean Serge Dimitri Ouattara
jean.ouattara@ujkz.bf
Version 2022-2023
Packages, Erreurs et autres
1 Gestion d’exceptions
3 Chaînes de caractères
4 Modèle (Template)
Packages, Erreurs et autres
1 Gestion d’exceptions
3 Chaînes de caractères
4 Modèle (Template)
Gestion d’exceptions Gestion des espaces de noms namespace Chaînes de caractères Modèle (Template)
Généralités 1
Illustration
Procedure f()
Entier b; Fonction g(Entier t): Caractere *
Caractere *p; Caractere *p;
Pour b de 1 à 10 Faire p<--AlouerMemoire(t);
p<--g(b); Si (Echec dans Allocation) Alors
SI Exception(Allocation impossible) Alors Exception(Allocation impossible);
Afficher(Memoire non allouée); Fin Si
Retourner; Afficher(Allocation réussi);
FinException Retourner p;
Fin Pour
Gestion d’exceptions Gestion des espaces de noms namespace Chaînes de caractères Modèle (Template)
Généralités 2
Lévée de l’exception
Lévée de l’exception
Capture de l’exception
Capture de l’exception 1
Capture de l’exception 2
try{
...
}catch(int i){
...
}catch(const char *){
...
}catch(...){
...
}
1 Gestion d’exceptions
3 Chaînes de caractères
4 Modèle (Template)
Gestion d’exceptions Gestion des espaces de noms namespace Chaînes de caractères Modèle (Template)
Généralités
Espace de noms
Un programme important utilise de nombreuses bibliothèques,
fonctions, etc. Pour éviter les conflits de noms, on utilise des
espaces de noms (namespace) :
on associe un nom à un ensemble de variables, types,
fonctions ;
Leur nom complet est : leur nom d’espace suivi de : : et de
leur nom. Par exemple la fonction int fct()... définie dans
l’espace de nom A aura pour nom complet A : :fct() ;
Les noms complets de cout et cin sont std : :cout et
std : :cin ;
Pour éviter d’écrire les noms complets , on utilise : using
namespace std ;
Gestion d’exceptions Gestion des espaces de noms namespace Chaînes de caractères Modèle (Template)
Implémentation en C++
Namespace et classe
A.cpp
#include "A.hpp"
namespace tec {
A.hpp void A::m();
namespace tec { ...
class A { }
public: }
void m();
}; A.cpp version 2
} #include "A.hpp"
void tec::A::m();
...
}
Packages, Erreurs et autres
1 Gestion d’exceptions
3 Chaînes de caractères
4 Modèle (Template)
Gestion d’exceptions Gestion des espaces de noms namespace Chaînes de caractères Modèle (Template)
1 Gestion d’exceptions
3 Chaînes de caractères
4 Modèle (Template)
Gestion d’exceptions Gestion des espaces de noms namespace Chaînes de caractères Modèle (Template)
Problématique
Problème
On a besoin d’une classe dont les méthodes effectuent les
mêmes opérations quel que soit le type des attributs. Par
exemple on suppose que Plus(a, b) fera :
somme de a et b si ce sont des nombres (entiers, réels) ;
concaténation de a et b si ce sont des chaînes de
caractères ;
OR (ou logique) de a et b si ce sont des booléens ;
...
Solution
La solution à ce genre de problème dans C++ est d’utiliser la
généricité et les templates.
Gestion d’exceptions Gestion des espaces de noms namespace Chaînes de caractères Modèle (Template)
Comment faire ?
main correspondant
int main() {
Point<int> p1(2, 5);
cout << p1.toString() << endl;
// affiche (2, 5)
Point<float> p2(2.3, 5.8);
cout << p2.toString() << endl;
// affiche (2.300000, 5.800000)
return 0;
}
UtilisationSTL.cpp
#include <vector>
#include <iostream>
#include <algorithm>
int main(void) {
int temp;
std::vector<int> collection;// structure de données
std::cout << "Entrer des entiers, entrer 0 pour arrêter!";
while(std::cin >> temp != 0) {
if(temp == 0) break;
collection.push_back(temp); // algorithme push_back
}
std::sort(collection.begin(), collection.end());// algorithmes
std::cout << "La version triée des entrées est : ";
for(std::vector<int>::iterator i=collection.begin(); i!=collection.end();
std::cout << i << std::endl;
}
}