C plus plus

Image manquante
Langage_progr.png
image:Langage_progr.png

Cet article fait partie de la série
Langages de programmation
Langages à objets
Ada 95 - C++ - C#
Common Lisp
Delphi - Eiffel - Java
Nice - Oz - Python
Simula - Smalltalk
Visual Basic
Langages impératifs
APL - ASP - Assembleur
BASIC - C - COBOL
Forth - FORTRAN - Logo
Pascal - Perl - PHP
Langages fonctionnels
Erlang - Haskell
ML/OCaml - Oz
Lisp/Common Lisp
Scheme
Langages déclaratifs
Clips - Oz - Prolog
Langages concurrents
Ada 95 - Erlang
Java - Oz
Langages balisés
HTML - SGML - XML
Dialectes XML
S-expressions
Voir aussi
Conception - Codage
Tests - Optimisations
Note : Le titre de cet article est incorrect à cause de limitations techniques. Le titre correct est C++.
Sommaire

Préliminaires

Le C++ est un langage de programmation à usage multiple. Ce langage permet la programmation sous de multiples paradigmes comme, par exemple, la programmation procédurale, la programmation orientée objet, la programmation générique. Au cours des années 1990, le C++ est devenu l'un des langages de programmation les plus populaires dans l'industrie informatique. Le langage C++ n'appartient à personne et par conséquent n'importe qui peut l'utiliser sans payer de droits.

Bjarne Stroustrup a développé le C++ au cours des années 1980, alors qu'il travaillait dans le laboratoire de recherche Bell d'AT&T. Il s'agissait en l'occurrence d'améliorer le langage C et il l'avait d'ailleurs nommé C with classes (« C avec des classes »). Les premières améliorations se concrétisèrent donc par l'ajout du support des classes, suivies par de nombreuses autres comme les fonctions virtuelles, la surcharge d'opérateurs, l'héritage (simple ou multiple), les « templates », la gestion d'exceptions...

Le langage C++ est normalisé par l'ISO. Sa première normalisation date de 1998 (ISO/IEC 14882:1998), et sa dernière de 2003 (ISO/IEC 14882:2003). La normalisation de 1998 standardise la base du langage (Core Language) ainsi que la bibliothèque C++ standard (C++ Standard Library). La normalisation de 2003 inclut également la Standard Template Library et la C Standard Library .

Il existe de nombreuses autres bibliothèques en C++ non incluses dans le standard. De plus, le C++ permet l'utilisation des nombreuses bibliothèques C existantes.

Fonctionnalités introduites par le C++

On peut considérer que le C++ « est du C » avec un ajout de fonctionnalités. Une remarque importante est à faire cependant : Certains programmes syntaxiquement corrects en C, ne le sont pas en C++.

Les fonctionnalités ajoutées sont :

La compilation d'un programme en C++ effectue également un contrôle plus minutieux sur le typage.

Histoire du C++

Stroustrup a commencé à travailler sur du C avec classes en 1979. L'idée de créer un nouveau langage vient de l'expérience en programmation de Stroustrup pour sa thèse de doctorat. Stroustrup trouvait que Simula avait des fonctionnalités très utiles pour le développement de gros programmes mais qu'il était trop lent pour être utilisé en pratique (dû à un problème d'implémentation du compilateur Simula), tandis que BCPL était rapide mais de trop bas niveau et pas adapté au développement de gros logiciels. Quand Stroustrup commença à travailler dans les laboratoires de Bell, on lui demanda d'analyser le noyau UNIX en vue de faire du calcul distribué. Se rappelant sa thèse, Stroustrup commença à améliorer le langage C avec des fonctionnalités similaires à celle de Simula. C a été choisi parce qu'il est rapide, portable et d'usage général. Au départ, classe (avec encapsulation des données), classe dérivée, vérification des types renforcés (typage fort), inlining, et argument par défaut étaient des fonctionnalités ajoutées au C.

Comme Stroustrup développait le C avec classes, il a aussi écrit CFront, un compilateur qui génère du code source C a partir de code source C avec classes (C++). La première commercialisation fut en octobre 1985.

En 1983, le nom du langage fut changé de "C avec classes" en C++. Parmi les nouvelles fonctionnalités qui furent ajoutées au langage, il y avait les fonctions virtuelles, la surcharge des opérateurs et des fonctions, les références, les constantes, le contrôle du typage amélioré et un nouveau style de commentaire (//). En 1985 fut publiée la première édition de The C++ programming Language, apportant ainsi une référence importante au langage qui n'avait pas encore de standard officiel. En 1989, sortie de la version 2.0 du C++. Parmi les nouvelles fonctionnalités, il y avait l'héritage multiple, les classes abstraites, les fonctions membres statiques, les fonctions membres constantes, et les membres protégés. En 1990, The Annotated C++ Reference Manual fut publié apportant les bases du futur standard. Les ajouts de fonctionnalités tardifs comprennent les templates, les exceptions, les espace de noms, les nouvelles conversions et le type booléen.

Comme le langage C++ évoluait, la bibliothèque standard évoluait de concert. La première addition à la bibliothèque standard du C++ fut les flux d'E/S qui apporte les fonctionnalités nécessaires au remplacement des fonctions C traditionnelles telles que printf et scanf. Ensuite, parmi les additions les plus importantes, il y a la Standard Template Library.

Après des années de travail, un comité réunissant l'ANSI et l'ISO standardisa le C++ en 1998 (ISO/IEC 14882:1998). Pendant quelques années après la sortie officielle du standard, le comité traita le rapport de problèmes et publia une version corrigée du standard C++ en 2003.

Personne ne possède le langage C++. Il est libre de droit. Le document de standardisation n'est quant à lui pas disponible gratuitement.

La bibliothèque standard (C++ standard library)

La bibliothèque C++ standard est en grande partie un surensemble des fonctions disponibles dans la bibliothèque C standard. Elle englobe la STL qui met à la disposition du programmeur des outils puissants comme les collections et les itérateurs.

A l'origine, la STL était une bibliothèque développée par Hewlett-Packard. Dans la norme, celle-ci n'est pas appelée STL, car elle est considérée comme faisant partie de la bibliothèque C++ standard. Toutefois, beaucoup de personnes l'appellent encore de cette manière pour distinguer d'une part, les fonctions d'entrées/sorties comprises dans cette bibliothèque et, d'autre part, celles fournies par la bibliothèque C.

Comme pour le C, l'utilisation d'une bibliothèque se fait par l'intermédiaire de la directive #include (suivie du nom du fichier d'en-tête).

La programmation orientée objet en C++

Le C++ introduit des concepts de programmation orientée objet. Il offre pour ce faire les classes qui couvrent deux besoins essentiels :

L'encapsulation en C++

L'encapsulation permet de faire abstraction du fonctionnement interne (c'est-à-dire, l'implémentation) d'une classe et ainsi de ne se préoccuper que des services rendus par celle-ci. Le C++ implémente l'encapsulation en permettant de déclarer les membres d'une classe avec le mot réservé public, private ou protected. Ainsi, lorsqu'un membre est déclaré :

Le C++ n'impose pas l'encapsulation des membres dans leurs classes. On pourrait donc déclarer tous les membres publics, mais en perdant une partie des bénéfices apportés par la programmation orientée objet. Il est de bon usage de déclarer toutes les données privées, ou au moins protégées, et de rendre publiques les méthodes agissant sur ces données. Ceci permet de cacher les détails de l'implémentation de la classe.

Exemples de programme

« Hello, world »

Voici l'exemple de Hello world donné dans The C++ Programming Language, Third Edition de Bjarne Stroustrup :

#include <iostream>
 
 int main()
 {
   std::cout << "Hello, world!\n";
 }
 

Déclaration de classe

class MessageInternet
 {
  private:
   string m_sujet;
   string m_expediteur;
   string m_destinataire;
  public:
   MessageInternet (string sujet, string expediteur, string destinataire);
   string sujet ();
   string expediteur ();
   string destinataire ();
 };
 

Déclaration de templates

À quoi servent les templates ?

Avec les templates, on peut écrire des fonctions et des classes non typées. Les templates permettent d'écrire du code générique (généré suivant le type de donnée).

Pourquoi utiliser des templates ?

En programmation, il faut parfois écrire de nombreuses versions d'une même fonction ou classe suivant les types de données manipulées.

Par exemple, un tableau de int ou un tableau de double sont très semblables, les fonctions de tri ou de recherche dans ces tableaux sont identiques au type près.

En résumé, l'utilisation des templates permet de "paramétrer" le type des données manipulées.

Avantages à utiliser des templates :

- écritures uniques pour les fonctions et les classes. - moins d'erreur dû à la réécriture (copier-coller assassin!)

Exemple de templates :

Dans la bibliothèque standard C++, il y a de nombreux templates. On citera à titre d'exemple, les entrée/sorties, les chaînes de caractères ou les containers. Les classes string, istream, ostream et iostream sont toutes des instanciations de char type.

Les fonctions de recherche et de tri sont aussi des templates écrites et utilisables avec de nombreux types.

template<typename String> class Message {
  public:
   typedef String string_type;
  private:
   string_type m_sujet;
   string_type m_expediteur;
   string_type m_destinataire;
  public:
   Message(string_type sujet, string_type expediteur, string_type destinataire);
   string_type sujet ();
   string_type expediteur ();
   string_type destinataire ();
 };
 
 typedef Message<string> MessageString;  // MessageString est fonctionnellement équivalent à
                                         // la classe MessageInternet ci-dessus
 typedef Message<UnicodeString> MessageUnicode;
 

Bibliographie

Liens externes

See also: C plus plus, 1979, 1983, 1985, 1994, 1998, 2003, APL (langage)