La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "Erratum C Surcharge For(int x=0; … 2."— Transcription de la présentation:

1 ikariya@via.ecp.fr

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

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

4 Introduction Langage TRES répandu Performances Portabilité Rigueur … « Extension » du C Ceci nest quun rapide tour dhorizon Ca sapprend par la pratique ! 4

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

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édric stilgar sur IRC 6

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

8 Whats new ? 8

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

10 Whats new ? bool Surcharge de fonctions, dopérateurs Références Namespaces Fonction templates Nouveaux headers 10

11 Surcharge Plusieurs fonctions avec le même nom Contraintes = Signature unique Liste ordonnée des types darguments 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 11

12 Surcharge - exemple int ma_fonction(int a, int b); float ma_fonction(float a, float b); bool ma_fonction(char a, float nom, int c); int ma_fontion(float a); ERREUR : float ma_fonction(int a, int b); AMBIGUE : int main () { ma_fonction(1, 3.0); return 0; } 12

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) 13

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

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

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

17 Une nécessité ! 17

18 Les objets Type qui regroupe des informations (membres) et des moyens de les traiter (méthodes) Exemple: un magicien Points de vieAttaque Reserve de ManaEngage Etat 18

19 Définition de lobjet class Wizard { public: void Attaque(Wizard &adv) { … } void Engage(int i) { mana += i; } int mana, vie; bool etat; }; 19

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 20

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

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

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

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

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

26 Allocation dynamique de mémoire malloc et free non adaptés (besoin dappel 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 26

27 Membres privés / publiques public / private / protected Encapsulation : cacher des membres à lextérieur sassurer quils ne seront pas modifiés création dune interface utilisateur de lobjet 27

28 Pour épater les voisins 28

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

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

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

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 32

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

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

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

36 Comment éviter de refaire des choses déjà (bien) faites 36

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

38 En vrac … string vector list map set … 38

39 Notion ditérateur Permet de parcourir le conteneur Syntaxe unifiée Similaire aux pointeurs Exemples 39

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

41 Apres cette courte présentation … A vos compilateurs ! 41


Télécharger ppt "Erratum C Surcharge For(int x=0; … 2."

Présentations similaires


Annonces Google