Introduction au C++ et à la programmation objet Version 1.12b (Mars 2013) par E
Introduction au C++ et à la programmation objet Version 1.12b (Mars 2013) par Emmanuel Courcelle emmanuel.courcelle@toulouse.inra.fr 1 Cours C++ - Emmanuel Courcelle / CUTIS / Formation permanente du C.N.R.S. - Janvier 2013 - 2 Cours C++ - Emmanuel Courcelle / CUTIS / Formation permanente du C.N.R.S. - Janvier 2013 - Introduction A propos de ce cours Vous pouvez télécharger l'ensemble des fichiers constituant ce cours. Vous pourrez alors l'installer sur votre machine personnelle et le lire avec tout navigateur. Il vous suffira d'ouvrir le fichier index.html Vous pouvez aussi installer ce cours sur votre serveur web, mais dans ce cas merci de noter que ce cours est placé sous licence Creative Commons, "Attribution - Pas d’Utilisation Commerciale - Pas de Modification 3.0 non transposé (CC BY-NC-ND 3.0)" Si vous trouvez des inexactitudes, ou si vous avez des idées d'améliorations, merci de me contacter. Symboles et conventions utilisés dans ce cours Exercices Au boulot !!! Cliquez sur cette rubrique du menu et vous aurez quelques sujets d'exercices. Parmi eux, certains sont corrigés. Dans ce cas, promis-juré, j'ai réussi à compiler et à exécuter le programme, au moins avec gcc. cplusplus Un pointeur vers l'excellent site web http://www.cplusplus.com/. La référence du langage, y compris les entrées- sorties.(en Anglais). FAQ C++ Les FAQ C++: un livre, mais aussi un site web ! A lire et à relire pour bien comprendre l'esprit du C++ C++11 Par Bjarne Stroustrup, les innovations apportées par la norme de 2011 du C++ BOOST Avant de programmer, allez donc voir si le projet BOOST n'aurait pas un objet tout fait à vous proposer! Cliquez là-dessus pour accéder à une page destinée aux terriens normaux, qui vous donnera des explications plus simples à comprendre, en particulier grâce à des analogies avec le monde réel. Il y a des exemples de code dans le cours. Je ne garantis pas qu'ils fonctionnent, tout simplement parce qu'ils sont pour la plupart incomplets, ou sont du "pseudo-code" plutôt que du code réel. Regardez les exercices si vous voulez du code qui fonctionne pour de vrai. Peut-être voudrez-vous mettre en pratique les notions expliquées, sans obligatoirement regarder le corrigé des exercices. Dans ce cas, il vous faut savoir écrire un programme C++ minimum, par exemple celui qui écrit hello world sur l'écran. #include <iostream> using namespace std; int main(int argc, char* argv[]) { cout << "Nombre de paramètres: " << argc << endl; cout << "Nom du programme : " << argv[0] << endl; cout << "Hello world" << endl; cerr << "Hello buggy world" << endl; return 0; }; Il s'agit d'instructions d'entrées-sorties. La première écrit sur la sortie standard, la seconde sur l'erreur standard. Les deux premières lignes vous permettent d'utiliser la bibliothèque standard. Prenez-les pour l'instant comme des formules magiques, ce n'est qu'à la fin du cours que vous comprendrez réellement de quoi il retourne Le C++ est un langage très simple à apprendre (mais si...) mais il y a tout-de-même quelques difficultés. Celles-ci sont indiquées comme ce paragraphe-ci. Certaines règles, dites "règles d'or", sont plutôt des règles de bon usage que des règles imposées par le compilateur. Elles sont indiquées comme ceci. Et chez les autres, comment ça se dit ? Derrière cette icône sont regroupées quelques comparaisons avec d'autres 3 Cours C++ - Emmanuel Courcelle / CUTIS / Formation permanente du C.N.R.S. - Janvier 2013 - langages objets: certaines notions se retrouvent (mais se disent différemment), alors que d'autres notions sont absentes de certains langages. Impasses... J'ai volontairement fait l'impasse sur plusieurs aspects du langage: Fichiers sources Le découpage en fichiers .h et .cpp n'est pas abordé. Fonctions inline Les fonctions peuvent être déclarées inline pour améliroer la rapidité d'exécution; ce point n'est pas abordé en détails. Héritage privé ou protégé L'héritage privé ou protégé n'est pas abordé. R.T.T.I. Run Time Type Identification. Permet de déterminer quel est le type d'une variable. Dans de rares cas cela est indispensable, mais la plupart du tempsdes mécanismes basés sur l'héritage seront préférables. C++11 Les innovations de la nouvelle norme du C++, ne sont que très partiellement évoquées. Un peu d'histoire. Le C++ est apparu durant les années 80; il s'agit d'une création de Bjarne Stroustrup, un informaticien qui travaillait chez ATT sur de gros projets d'informatique distribuée. Quelques dates: • 1965-1970 Le langage BCPL est largement utilisé pour la programmation système, en particulier chez ATT • 1969-1972 Naissance du langage B, une évolution de BCPL, puis du langage C, lui-même une évolution de B • 1978 The C Programming Language par Richie et Kernighan, ce livre a tenu lieu de manuel de référence du langage pendant plusieurs années. • 1979 Bjorne Stroustrup commence à travailler sur un nouveau C ("C with Classes") • 1983 La première version du C++ est utilisée en interne chez ATT • 1983 Mise en place de la commission de normalisation du C par l'ANSI • 1985 Première implémentation commerciale du C++ • 1985 Normalisation du C ("C Ansi") • 1989 Premiers travaux de normalisation du C++ • Nov 1997 - Approbation du nouveau standard (Ansi C++) par le comité de normalisation. Aussi appelé C++98 ou C++03 • 1998-2011 - Reprise des travaux de normalisation • Juillet 2011 - Approbation du dernier standard à ce jour: C++11, appelé dans un premier temps C++0x. Ce document porte essentiellement sur le C++98, cependant certaines innovations du C++11 ont été ajoutées et seront signalées. • A suivre... La syntaxe évolue bien entendu d'un langage à l'autre, mais comme ceux-ci sont fortement apparentés entre eux, les différences de syntaxe sont au fond mineures. Par contre, la manière dont les données sont traitées va beaucoup évoluer au cours du temps; BCPL et B sont des langages non typés: cela signifie que les données seront toutes rassemblées dans des tableaux de "mots", encore appelés "cellules". La taille de chaque cellule est tout simplement la taille de cellule élémentaire utilisée sur la machine (18 bits). Normal, au fond, pour un langage destiné à remplacer l'assembleur, tout en gardant ses principales caractéristiques. Cela a cependant deux conséquences importantes: • La notion de pointeur ne présente aucune difficulté à implémenter • La correspondance forte entre pointeurs et tableau est parfaitement naturelle. En 1970, un nouvel ordinateur (DEC pdp 11) est acquis par l'équipe: dès lors, la taille des mots n'est plus 18 bits, mais 16 bits, et l'adressage se fait par octets. Le langage B est rapidement recodé pour fonctionner sur la nouvelle machine, mais de gros problèmes se posent alors: • Les opérateurs mettant en jeu des pointeurs, conçus pour des machines sur 18 bits, deviennent très inefficaces avec la nouvelle machine. • Le pdp 11 étant équipé de coprocesseur flottant, comment en tirer parti avec un langage ne connaissant que des 4 Cours C++ - Emmanuel Courcelle / CUTIS / Formation permanente du C.N.R.S. - Janvier 2013 - données sur un mot, alors que 16 bits est insuffisant pour représenter un nombre réel ??? (18 bits auraient été suffisants...) La seule manière de s'en sortir est alors de doter le langage de variables de différents types. Le nouveau langage, appelé C, inclut donc la notion de types: int, char, float, puis le type struct fait son apparition un peu plus tard. Langage proche de la machine ou abstraction de données ? On voit donc bien l'évolution, qui s'est poursuivie jusqu'au C++: on part d'une situation où le langage n'est au fond qu'un "super-assembleur", pour gagner petit à petit en abstraction, (type struct en particulier), ce qui permettra au langage d'être utilisé pour un usage plus général. Toutefois, on reste toujours "proche de la machine", de sorte que le C peut dans la plupart des cas remplacer totalement l'assembleur, même pour développer du code proche du hardware (pilotes de périphériques, par exemple). Cette évolution a été poursuivie par Stroustrup lors de la conception du C++: le type class, qui est l'aboutissement du type struct, permet d'implémenter un très haut niveau d'abstraction des données; en même temps, le C++ étant un surensemble du C, il reste un langage de choix pour l'informatique système. 5 Cours C++ - Emmanuel Courcelle / CUTIS / Formation permanente du C.N.R.S. - Janvier 2013 - 6 Cours C++ - Emmanuel Courcelle / CUTIS / Formation permanente du C.N.R.S. - Janvier 2013 - La programmation objet Poser un problème Avant de se précipiter sur son clavier pour écrire un programme, il convient de réfléchir afin de poser correctement le problème... Or, la manière même dont le problème sera posé influe sur l'écriture du programme. D'où la notion de "paradigme de programmation". Or, s'il est possible d'implémenter tous les paradigmes en utilisant n'importe quel langage, cela sera plus ou moins facile selon le langage utilisé. Ainsi, il est possible de programmer en objet en utilisant le C... mais le C++, conçu dans cet objectif, supporte la programmation objet, par sa syntaxe d'une part, par les contrôles apportés tant au moment de la compilation que lors de l'exécution d'autre part. La programmation objets expliquée aux programmeurs Si vous êtes programmeur, mais habitué aux langages de uploads/Industriel/ 0420-introduction-au-cpp-et-a-la-programmation-orientee-objet.pdf
Documents similaires
-
20
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Fev 11, 2021
- Catégorie Industry / Industr...
- Langue French
- Taille du fichier 1.0228MB