introduction au c n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Introduction au C++ PowerPoint Presentation
Download Presentation
Introduction au C++

Loading in 2 Seconds...

play fullscreen
1 / 41
rosalia-woriega

Introduction au C++ - PowerPoint PPT Presentation

71 Views
Download Presentation
Introduction au C++
An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Introduction au C++ ikariya@via.ecp.fr

  2. Erratum C • Surcharge • For(int x=0; …

  3. Au menu • Introduction • Prérequis • Documentation • Problématiques • Nouveautés syntaxiques du C++ • Avoir la classe • Plus de classe (encore) • Intro à la STL

  4. Introduction • Langage TRES répandu • Performances • Portabilité • Rigueur • …  • « Extension » du C • Ceci n’est qu’un rapide tour d’horizon Ca s’apprend par la pratique !

  5. Prérequis • Introduction au C • Problématiques du C • Un peu de pratique (GCC, VC ou autre)

  6. Sources de documentation - Bis • Internet • http://www.developpez.com/ • Google • … • Bouquins divers et variés(mais ca coûte cher et utilitévariable) • Cédricstilgar sur IRC

  7. Problèmatiques • Besoin de performances • Language de haut niveau • Programmation orientée objet • Nouvelle philosophie de programmation • Encapsulation des données • Masquage de l’implémentation • Réutilisation (Capitalisation) • …

  8. What’s new ? Nouveautés syntaxiques

  9. Hello World des temps modernes #include <iostream> /* Commentaires Multi-lignes */ int main() { // Toujours le même prgm pour commencer std::cout << "Tagazok !"  << std::endl; return 0; }  

  10. What’s new ? • bool • Surcharge de fonctions, d’opérateurs • Références • Namespaces • Fonction templates • Nouveaux headers

  11. Surcharge • Plusieurs fonctions avec le même nom • Contraintes = Signature unique • Liste ordonnée des types d’arguments différents • Ne peuvent pas différer que par le type de retour • Attention aux ambiguités ! • Surcharge des opérateurs possible • règles strictes sur les paramètres

  12. Surcharge - exemple intma_fonction(int a, int b); floatma_fonction(float a, float b); boolma_fonction(char a, float nom, int c); intma_fontion(float a); ERREUR : floatma_fonction(int a, int b); AMBIGUE : int main () { ma_fonction(1 , 3.0); return 0; }

  13. Références • Passage de la variable et pas de la copie • Eviter la recopie de la variable (grosses structures) • Ne pas confondre avec les pointeurs (concepts assez proches)

  14. Références - exemple int a = 50; voidplus_un(int x) { x += 1; } plus_un(a); // a==50 voidplus_un(int* x) { *x += 1; } plus_un(a); // a==51 voidplus_un(int& x) { x += 1; } plus_un(a); // a==51

  15. Namespaces • Vive les espaces de nom ! • namespace {} • Résolution des conflits, opérateur :: • Espace de nom standard: std • Directive « using »

  16. Templates • Ecrire du code générique • Dans les structures • Dans les fonctions • Rien de plus ici …

  17. Une nécessité ! Avoir la classe

  18. Les objets • Type qui regroupe des informations (membres) et des moyens de les traiter (méthodes) • Exemple: un magicienPoints de vie AttaqueReserve de Mana EngageEtat

  19. Définition de l’objet class Wizard { public: void Attaque(Wizard &adv) { … } void Engage(int i) { mana += i; } int mana, vie; booletat; };

  20. Erreurs courantes • Compilation • Syntaxe • Warning • Edition de liens • fonctions, variables non déclarées, non implémentées, non trouvées … • Exécution • segfault

  21. Organisation des fichiers • Rappel compilation / édition de liens • Organisation des fichiers : Wizard.h(pp) class Wizard { public: void Attaque(Wizard &adv); void Engage(int i); int mana, vie; booletat; }; Wizard.cpp voidWizard::Attaque(Wizard &adv) { … } voidWizard::Engage(int i) { mana += i; }

  22. Précompilation • A quoi ca sert ? • Dans notre cas : Wizard.h(pp) #ifndef WIZARD_H #define WIZARD_H class Wizard { … }; #endif Wizard.cpp #include "Wizard.h" voidWizard::Attaque(Wizard &adv) …

  23. La pratique Wizardika; ika.etat = true; ika.vie = 20; ika.mana = 0; ika.Engage(10); Wizard *p_ika = &ika; p_ika ->vie--; ika->Engage(1);

  24. Constructeur / Destructeur • Initialisation préalable des données avant toute utilisation de l’objet • mettre les PV à 20 • avoir un magicien vivant • Constructeur : appelé à la création de l’objet • Destructeur : appelé à la destruction

  25. Constructeur / Destructeur class Wizard { public: Wizard() { etat = true; vie = 20; mana = 0; } ~Wizard() { } };

  26. Allocation dynamique de mémoire • malloc et free non adaptés (besoin d’appel du contructeur) • p = new T; donne un pointeur vers une zone de la mémoire pour stocker un objet du type T • delete p; déclare la mémoire allouée comme inutile. A MANIER AVEC PRECAUTION 1 NEW = 1 DELETE

  27. Membres privés / publiques • public / private / protected • Encapsulation : • cacher des membres à l’extérieur • s’assurer qu’ils ne seront pas modifiés • création d’une interface utilisateur de l’objet

  28. Pour épater les voisins Plus de classe

  29. Dérivation • Créer un objet plus spécifique à partir d’un objet de base. • Wizard > WhiteWizard ou BlackWizard • (Wizard&)Mon_WhiteWizardAMoi; • (WhiteWizard&)Mon_WizardAMoi;

  30. Dérivation class WhiteWizard:Wizard { public: void Heal(); } Wizard w; WhiteWizardww; ww.Engage(1); ww.Attaque(w); w.Engage(2); w.Attaque(ww);

  31. Dérivation Wizard *p_w = &ww; p_w->Engage(3); // OK p_w->Heal(); // NOK

  32. Fonctions virtuelles • WhiteWizard, BlackWizard, MarieWizard ne se soignent pas de la même façon et on veux que tout Wizard puisse se soigner. • On utilise des fonctions qui peuvent être redéfinies dans les classes dérivées : les fonctions virtuelles

  33. Fonctions virtuelles class Wizard { public: virtualvoid Heal() { vie++; } } class WhiteWizard { public: virtualvoid Heal() { SummonAura(); Wizard::Heal(); } };

  34. Fonction virtuelle pure • la contrainte en plus ! class Wizard { public: virtualvoid Heal() = 0; }; • Rend la classe de base abstraite.

  35. Surcharge (bis) • Surcharge des fonctions et des opérateurs possible • Friend (non explicité ici) • exemple : matrices

  36. Comment éviter de refaire des choses déjà (bien) faites Intro à la STL

  37. STL • Standard Template Library • Bibliothèque standard (dans la norme C++) offre des types et des fonctions utiles. • Dans le namespacestd:: • Conteneurs

  38. En vrac … • string • vector • list • map • set • …

  39. Notion d’itérateur • Permet de parcourir le conteneur • Syntaxe unifiée • Similaire aux pointeurs • Exemples

  40. Pourquoi utiliser la STL ? • Réinventer la roue ??? • Eviter les bugs (fuites de mémoire principalement) • Simplicité d’utilisation • Efficacité • Ecriture du code • Code

  41. Apres cette courte présentation …A vos compilateurs ! Des questions ?