Un livre de Wikilivres. Programmation C++ Une version à jour et éditable de ce
Un livre de Wikilivres. Programmation C++ Une version à jour et éditable de ce livre est disponible sur Wikilivres, une bibliothèque de livres pédagogiques, à l'URL: //fr.wikibooks.org/wiki/Programmation_C%2B%2B Vous avez la permission de copier, distribuer et/ou modifier ce document selon les termes de la Licence de documentation libre GNU, version 1.2 ou plus récente publiée par la Free Software Foundation; sans sections inaltérables, sans texte de première page de couverture et sans Texte de dernière page de couverture. Une copie de cette licence est inclue dans l'annexe nommée « Licence de documentation libre GNU ». Avant-propos Ce livre est destiné à présenter les différents aspects du langage C++. L'objectif est d'en faire un livre référence sur les différents aspects de ce langage. Nous essayerons de proposer pour chaque concept un exemple illustratif complet. Introduction Quelques repères historiques A l'origine, un ordinateur ne comprenait que le langage binaire : un programme était constitué d'une suite de 0 et de 1 représentant un programme. 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++. Le développement a commencé au début de années 80. Il construit donc le C++ sur la base du C. C++ est capable de compiler un programme C, 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 C++/Version imprimable — Wikilivres https://fr.wikibooks.org/w/index.php?title=Programmation_C++/Versi... 1 sur 69 15/02/2014 16:36 programmation générique : il implémente les fonctions et classes génériques. 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 possiblité de déclaration de variables entre deux instructions d'un même bloc. Compilation La compilation consiste en une série d'étapes de transformation du code source en du code machine exécutable sur un processeur cible. Le langage C++ fait partie des langages compilés : le fichier exécutable est produit à partir de fichiers sources par un compilateur. Contrairement aux languages interprétés où il faut un logiciel interprétant le source, le fichier exécutable est produit pour une machine donnée : il est directement exécuté par le processeur. L'exécution est donc plus rapide. Phases de la compilation La compilation passe par différentes phases, produisant ou non des fichiers intermédiaires : préprocessing : Le code source original est transformé en code source brut. Les commentaires sont enlevés et les directives de compilation commençant par # sont d'abord traités pour obtenir le code source brut ; compilation en fichier objet : les fichiers de code source brut sont transformés en un fichier dit objet, c'est-à-dire un fichier contenant du code machine ainsi que toutes les informations nécessaires pour l'étape suivante (édition des liens). Généralement, ces fichiers portent l'extension .obj ou .o ; édition de liens : dans cette phase, l'éditeur de liens (linker) s'occupe d'assembler les fichiers objet en une entité exécutable et doit pour ce faire résoudre toutes les adresses non encore résolues, tant des mémoires adressées que des appels de fonction. L'entité exécutable est généralement soit un exécutable, soit une bibliothèque dynamique (DLLs sous windows et toutes les variantes, tels que objet COM, OCX, etc, et les .so sous linux). Les compilateurs sont capables de générer des bibliothèques statiques, qui sont en quelques sortes le rassemblement d'un ensemble de fichiers objet au sein d'un même fichier. Dans ce cas, la phase d'édition de liens n'a pas eu lieu. Cette découpe en phases permet de compiler séparément les bibliothèques en fichiers objets, et l'application et évite donc de tout re-compiler, ce qui prendrait beaucoup de temps pour les applications ayant un code source important. Les fichiers sources Les fichiers sources en C++ portent souvent l'extension .cpp, .cxx, .cc, parfois .C et sont des fichiers textes lisibles par le programmeur. Les fichiers d'en-tête Les fichiers "entêtes" ("headers" en anglais), traditionnellement d'extension .h ou .hpp (mais la plupart des entêtes systèmes du C++ standard n'ont plus d'extension du tout), contiennent généralement les prototypes de différentes fonctions, structures et classes. Ces prototypes proviennent : des bibliothèques standards du C++ : tout compilateur C++ doit fournir ces fichiers ainsi que les fichiers objets contenant l'implémentation des bibliothèques standards (souvent liées par défaut) ; de bibliothèques non standards fournis par l'éditeur du compilateur ou de l'environnement de développement ; de bibliothèques non standards (gratuites ou payantes) que le programmeur s'est procuré : citons par exemple la bibliothèque permettant d'accéder à une base de données mySQL. Lorsqu'une bibliothèque non standard est utilisée et que celle-ci englobe de nombreuses fonctionnalités (interface graphiques, accès à une base de données, surcouche système, communications réseaux, etc.), on parle parfois de framework. Citons par exemple Qt et WxWidgets dans cette catégorie. Un framework apparait parfois comme une véritable surcouche du système d'exploitation. uploads/Litterature/ programmation-c-fr-pdf.pdf
Documents similaires
-
12
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Dec 06, 2021
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.5042MB