Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
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
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.