1 / 41

Introduction au C++

Introduction au C++. ikariya@via.ecp.fr. Erratum C. Surcharge For( int x=0; …. Au menu. Introduction Prérequis Documentation Problématiques Nouveautés syntaxiques du C++ Avoir la classe Plus de classe (encore) Intro à la STL. Introduction. Langage TRES répandu Performances

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

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 ?

More Related