# Programmation C++/Introduction

* Avant-propos
* Introduction
* Compilation
* Un premier programme
* Les commentaires
* Le préprocesseur
* Les types de base et les déclarations
** Exercices
* Les opérations de base
* Les entrées-sorties
* Les pointeurs
** Exercices
* Les références
* Les tableaux
** Exercices
** Exercices sur les tableaux statiques
** Exercice : Tris des tableaux à une dimension
** Solution : Tris des tableaux à une dimension
* Les structures de contrôle
** Exercices
** Exercices if...else et switch
* Les fonctions
** Exercices
* Les structures
** Exercices
* Les classes
** Exercices
** Exercices de développement
* Les espaces de noms
* Les exceptions
* Les templates
** Exercices
* Conventions d'appel
* Les fichiers
* La librairie standard
* Expressions rationnelles
* Interfaces graphiques
* Bibliographie et liens

## Anciennes pages

* Opérateurs
* Héritage
* Polymorphisme
* Avant-propos
* Introduction
* Compilation
* Un premier programme
* Les commentaires
* Le préprocesseur
* Les types de base et les déclarations
** Exercices
* Les opérations de base
* Les entrées-sorties
* Les pointeurs
** Exercices
* Les références
* Les tableaux
** Exercices
** Exercices sur les tableaux statiques
** Exercice : Tris des tableaux à une dimension
** Solution : Tris des tableaux à une dimension
* Les structures de contrôle
** Exercices
** Exercices if...else et switch
* Les fonctions
** Exercices
* Les structures
** Exercices
* Les classes
** Exercices
** Exercices de développement
* Les espaces de noms
* Les exceptions
* Les templates
** Exercices
* Conventions d'appel
* Les fichiers
* La librairie standard
* Expressions rationnelles
* Interfaces graphiques
* Bibliographie et liens

## Anciennes pages

* Opérateurs
* Héritage
* Polymorphisme
[ Modifier le sommaire ]

## Quelques repères historiques

À l'origine, un ordinateur ne comprenait que le langage binaire : un programme était constitué d'une suite de 0 et de 1. Le programmeur devait lui-même traduire son programme sous cette forme. En 1950, Alan Turing et Maurice V. Wilkes de l'université de Cambridge branchent un clavier à un ordinateur, il est dorénavant possible de rentrer des mots associés au langage machine. Par exemple : mov, load, sub… Ces mots ne sont pas compris par l’ordinateur qui ne comprend que le langage binaire. Il faut alors un « assembleur » qui transforme le code en langage binaire.
La nécessité de créer un langage de haut niveau se fait sentir, le FORTRAN (FORmula TRANslator, traducteur de formules) est créé en 1957. Il est utilisé pour des programmes mathématiques et scientifiques.
En 1970, Ken Thompson, créa un nouveau langage : Le B, descendant du BCPL (Basic Combined Programming Language, créé en 1967 par Martin Richards). Son but était de créer un langage simple, malheureusement, son langage fut trop simple et trop dépendant de l’architecture utilisée…
En 1971 Dennis Ritchie commence à mettre au point le successeur du B, le C. Le résultat est convaincant : Le C est totalement portable (il peut fonctionner sur tous les types de machines et de systèmes), il est de bas niveau (il peut créer du code aussi rapide que de l’assembleur) et il permet de traiter des problèmes de haut niveau. Le C permet de quasiment tout faire, du driver au jeu.
Le C devient très vite populaire, tout le monde veut créer sa version. Beaucoup de compilateurs qui voient le jour sont incompatibles entre eux et la portabilité est perdue. Il est décidé qu’il faut un standard pour le C. L'ANSI (American National Standards Institute) s’en charge en 1983. La plupart des compilateurs se conforment à ce standard. Un programme écrit en C ANSI est compatible avec tous les compilateurs.
Il manque la programmation orientée objet au C. C’est pourquoi Bjarne Stroustrup, des laboratoires Bell, crée le C++, dont le développement a commencé au début de années 1980. Il construit donc le C++ sur la base du C. C++ est capable de compiler un programme C, et garde donc une forte compatibilité avec le C.
Les langages C et C++ sont les langages les plus utilisés dans le monde de la programmation.

## Présentation du C++

Le C++ est un langage multiparadigme. Il supporte essentiellement les paradigmes suivants :
* programmation procédurale : il reprend essentiellement les concepts du langage C, notamment la notion de fonction (une procédure étant une fonction avec un retour de type 'void') ;
* programmation structurée : il reprend la notion struct du langage C. Cette notion est considérée en C++ aussi comme des classes dont l'accès par défaut est public ;
* programmation orientée-objet : il implémente la notion de classe (dont l'accès par défaut est privé), d'encapsulation grâce aux restrictions d'accès (publique, protégé, privé), d'héritage (simple ou multiple) à l'aide du mécanisme de dérivation, d'abstraction grâce aux classes de base abstraites pures (on peut parler d'interface bien que les héritages multiples sur une interface C++ lèvent des difficultés montrant que leur implémentation est plus proche d'une classe abstraite que d'une vraie interface comme on peut en trouver en Java) ou non, de polymorphisme dynamique (ou au runtime) grâce aux fonctions membres virtuelles ;
* programmation générique ou méta-programmation : il introduit les templates ou modèles générique de code qui permettent de créer automatiquement des fonctions ou des classes à partir d'un ou plusieurs paramètres.
* programmation 'lambda-closure' : le C++ 11 introduit la notion de fermeture.
Outre ces grands paradigmes, C++ implémente la notion de typage strict, de constance, de polymorphisme statique (ou à la compilation) grâce à la surcharge et aux fonctions génériques, de références (une alternative aux pointeurs bien plus robuste et bien moins dangereuse) et permet également la surcharge d'opérateurs et de simuler les mixins grâce au mécanisme de dérivation multiple. Il est largement compatible avec le langage C, ce qui est à la fois une richesse et un problème. En effet, le langage C est actuellement (en 2006) un langage largement utilisé pour écrire des systèmes d'exploitation (Windows, Linux, Mac OS). Le C++ peut donc très naturellement avoir un accès direct au système d'exploitation dans le cadre d'une programmation de bas niveau, tout en permettant une programmation de haut niveau en exploitant toute la richesse des concepts orientés objet. Le problème levé par ce lien filial étant que les développeurs ayant appris le C avant le C++ utilisent les techniques C là où le C++ possède des ajouts moins dangereux (par exemple, les références). Ce type de code est surnommé « C with classes ».

## Les apports du C++ par rapport au C

Le C++ a apporté par rapport au langage C les notions suivantes :
* les concepts orientés objet (encapsulation, héritage) ;
* les références ;
* la vérification stricte des types ;
* les valeurs par défaut des paramètres de fonctions ;
* la surcharge de fonctions (plusieurs fonctions portant le même nom se distinguent par le nombre et/ou le type de leurs paramètres) ;
* la surcharge des opérateurs (pour utiliser les opérateurs avec les objets) ;
* les templates de classes et de fonctions ;
* les constantes typées ;
* la possibilité de déclaration de variables entre deux instructions d'un même bloc.