Norme ISO du C++

© D. Mathieu    mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique
Créé le 01/10/2000 - Dernière mise à jour : 24/09/2001

Sommaire

Introduction
Les composants de la librairie C++
Fichiers d'entête
Chaînes
Flux
Quelques modifications par rapport au C++ antérieur
Fonctions virtuelles
Surcharge de fonction virtuelle

Introduction

    Dans le courant de l'année 1994 les comités de normalisation ISO et ANSI ont publié une version préliminaire officielle du C++ X3 JI 6/WG21. La dernière version préliminaire fut publiée en décembre 1996. A part quelques points de détail, elle comportait l'essentiel de ce qui allait être la version définitive, datée du 27 septembre 1998 notée norme ISO/IEC 14882:1998(E).

    Parmi les nouveautés signalons tout d'abord qu'une politique contraignante a été mise en œuvre vis-à-vis de l'espace global des identificateurs. Jusqu'à présent les bibliothèques standard du C et du C++ offraient des identificateurs (variables, fonctions) globaux qui, sans être des mots réservés du langage, ne devaient pas être utilisés à d'autres fins sous peine de graves conflits. Dorénavant, tous les identificateurs des bibliothèques standard appartiennent à l'espace des noms standard std et doivent être utilisés soit préfixés par std::, soit avec la clause using namespace std.  Une autre nouveauté est la possibilité de traiter les caractères "longs" (universels) codés sur un mot (word) de 2 octets, et correspondant au type wchar_t. Toutes les entités (fichiers, classes, etc. ) se rapportant à ce type ont le même identificateur que celles se rapportant au type char, précédé d'un w : wctype au lieu de ctype, wistream au lieu de istream, etc.

    Cette nouvelle norme inclut la bibliothèque générique standard (Standard Template Library ou STL) d'Alexandre Stepanov qui représente à elle seule près de la moitié de la norme. De nombreuses implémentations antérieures de C++ proposaient des bibliothèques de classes et de fonctions qui allaient très au-delà des fonctions standard du C (par exemple, Microsoft et sa bibliothèque Microsoft Fundation Class, Borland et la Borland Object Windows, UP, DEC, etc. La bibliothèque STL, quoique restrictive par rapport à certaines de ces bibliothèque "propriétaires", offre de très nombreux outils et permet de façon "officielle" une nouvelle façon de programmer : la programmation générique et un véritable développement de composants logiciels.

Sommaire

Les composants de la librairie C++

    L'ensemble de la bibliothèque standard C++ offre un très grand nombre de constantes, variables, classes - génériques ou pas - prédéfinies, fonctions globales - génériques ou pas -, macros, objets, etc., regroupées en 10 catégories en fonction du domaine auquel ils appartiennent. Les classes, objets instanciés de ces classes et fonctions non membres qui leur sont associées sont appelés des composants.  Le tableau 1 indique la liste des 10 catégories qui constituent la librairie standard du C++.
 
Catégorie Contenu
Support langage  Composants liés à certaines parties du langage comme l'allocation de la mémoire dynamique, le traitement des exceptions
Diagnostics  Définition des exceptions standard levées par d'autres composants, fournissant un support pour le traitement uniforme des erreurs de la bibliothèque
Utilitaires Composants utilisés par la bibliothèque standard (y compris par la STL), mais aussi accessibles à l'utilisateur
Chaînes Représentation de base du texte
Localisation Facilités de formatage locales (pays)
Conteneurs Composants des conteneurs de la STL
Itérateurs Composants des itérateurs sur les conteneurs de la STL
Algorithmes Composants  des algorithmes généraux et de manipulation des conteneurs de la STL
Numériques Algorithmes numériques généralisés, nombres complexes, support pour le traitement vectorisé
E/S Composants d'entrées/sorties - flux

 tableau 1
Sommaire

Fichiers d'entête

    La nouvelle norme ISO C++ propose 68 fichiers d'entête qui peuvent être inclus par la directive de pré-compilation #inc1ude. Ils se répartissent en 3 catégories :
 Nom du fichier d'entête C   Contenu
assert.h définit la macro de debogage assert
ctype.h Contient des informations utilisées par les macros de conversion et de classification de caractères (telles que isalpha, etc . )
errno.h Définit les mnémoniques constantes pour les codes d'erreurs
float.h Contient des paramètres pour les routines en virgule flottante
iso646.h  
limits.h Contient des paramètres d'environnement, des informations à propos des limitations de compilation, et les portées de valeurs entières
locale.h Déclare les fonctions qui fournissent des informations spécifiques au pays et au langage
math.h Déclare  les prototypes des fonctions mathématiques et les programmes de traitement des erreurs mathématiques
setjmp.h Définit les fonctions 1ongjmp et setjmp et le type jmpbuf qu'elles utilisent
signal.h Définit les constantes et les déclarations nécessaires aux fonctions signal et raise
stdarg.h Définit les macros utilisées pour la lecture de la liste d'arguments dans des fonctions déclarées pour accepter un nombre variable d'arguments
stddef.h Définit plusieurs macros et types de données communs
stdio.h Déclare les fonctions standard d'entrées/sorties 
stdlib.h Déclare plusieurs fonctions d'emploi fréquent : les fonctions de conversion, les fonctions de recherche et de tri, et diverses autres 
string.h Déclare plusieurs fonctions de manipulation de mémoire et de chaînes
time.h Déclare plusieurs fonctions de manipulation du temps
wchar.h
wctype.h
 

 tableau 2
tableau 3 fichiers d'entête du C ANSI et leur correspondance en C++ ISO
algorithm ios map stack
bitset iosfwd memory stdexcept
complex iostream new streambuf
deque istream numeric string
exception iterator ostream typeinfo
fstream limits queue utility
functional list set valarray
iomanip locale sstream vector

tableau 4
Sommaire

Chaînes

    La librairie standard C++ offre (tableaux 5 et 6) toutes les possibilités de traitement de chaînes de caractères (de type char ou wchar_t), suites de caractères terminées par un caractère nul \0.
 
Classes génériques (types) Classes prédéfinies Itérateurs d'accès Capacité
basic-string string begin() empty()
  wstring end() size()
    rbegin() length()
    rend() max_size()
      capacity()
      resize()
      reserve()

tableau 5

Accès élémentaire Modifieurs Opérations
at() construct() find()
operator[] append() rfind()
c_str() operator+=() find_first_of()
data() assign() find_last_of()
  insert() find_first_not_of()
  remove() find_last_not_of()
  replace() compare()
  copy() getline()
  swap()  

tableau 6
Sommaire

Flux

    Les flux ont été largement développés par rapport aux versions antérieures de C++.

    Une classe de base ios_base est offerte, ainsi qu'un certain nombre de classes génériques (tableau 6, colonne 1), qui sont instanciées par les types prédéfinis char et wchar_t pour donner les classes prédéfinies (appelées aussi types) de la colonne 2. Ces classes sont elles-mêmes instanciées en 8 objets prédéfinis (colonne 3).
 
Classes génériques Classes prédéfinies (types) Objets
basic_ios ios
wios
 
basic_streambuf streambuf
wstreambuf
 
basic_istream istream
wistream
cin
wcin
basic_ostream ostream
wostream
cout, cerr, clog
wcout, wcerr, wclog
basic_stringbuf stringbuf
wstringbuf
 
basic_istringstream istringstream
wistringstream
 
basic_ostringstream ostringstream
wostringstream
 
basic_filebuf filebuf
wfilebuf
 
basic_ifstream ifstream
wifstream
 
basic_ofstream ofstream
wofstream
 
traits    

tableau 7
Sommaire

Quelques modifications par rapport au C++ antérieur

Fonctions virtuelles

    Le mot virtual qui précède une fonction virtuelle doit être répété dans toutes les classes dérivées :
 
class CMere
{
    // ...
  public :
    virtual void Editer (void);
    // ...

}; // CMere

class CFille : public CMere
{
    // ...
  public :
    virtual void Editer(void);
    // ...

}; // CFille

Sommaire

Surcharge de fonction virtuelle

    Une fonction de classe fille peut renvoyer un type différent de la fonction de la classe mère dans le cas suivant :
 
class CMere
{
    // ...
  public :
    virtual CMere * Fonction (...);
    // ...

}; // CMere

class CFille : public CMere
{
    // ...
  public :
    virtual CFille * Fonction (...);
    // ...

}; // CFille

Sommaire

[1] Pour plus de détails sur le contenu de ces fichiers, consulter Standard C de Plauger et Brodie.

© D. Mathieu     mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique