[email protected]. erratum c surcharge for(int x=0; … 2

41

Upload: rosine-allain

Post on 03-Apr-2015

118 views

Category:

Documents


3 download

TRANSCRIPT

Page 2: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Erratum C

Surcharge For(int x=0; …

2

Page 3: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Au menu

IntroductionPrérequisDocumentationProblématiques

Nouveautés syntaxiques du C++ Avoir la classe Plus de classe (encore) Intro à la STL

3

Page 4: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Introduction

Langage TRES répanduPerformancesPortabilitéRigueur… 

« Extension » du C Ceci n’est qu’un rapide tour d’horizon

Ca s’apprend par la pratique !

4

Page 5: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Prérequis

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

5

Page 6: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

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

6

Page 7: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Problèmatiques

Besoin de performances Language de haut niveau Programmation orientée objet

Nouvelle philosophie de programmationEncapsulation des donnéesMasquage de l’implémentationRéutilisation (Capitalisation)…

7

Page 8: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

What’s new ?

8

Page 9: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Hello World des temps modernes

#include <iostream>

/* CommentairesMulti-lignes */

int main() {// Toujours le même prgm pour commencerstd::cout << "Tagazok !"  << std::endl;return 0;

}  

9

Page 10: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

What’s new ?

bool Surcharge de fonctions, d’opérateurs Références Namespaces Fonction templates Nouveaux headers

10

Page 11: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

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

11

Page 12: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Surcharge - exempleint 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

Page 13: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

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

Page 14: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Références - exemple

14

Page 15: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Namespaces

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

15

Page 16: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Templates

Ecrire du code génériqueDans les structuresDans les fonctions

Rien de plus ici …

16

Page 17: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Une nécessité !

17

Page 18: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

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

18

Page 19: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Définition de l’objet

class Wizard {

public:

void Attaque(Wizard &adv) {

}

void Engage(int i) { mana += i; }

int mana, vie;

bool etat;

};

19

Page 20: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Erreurs courantes

CompilationSyntaxeWarning

Edition de liensfonctions, variables non déclarées, non

implémentées, non trouvées …

Exécutionsegfault

20

Page 21: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Organisation des fichiers

Rappel compilation / édition de liens Organisation des fichiers :

21

Page 22: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Précompilation

A quoi ca sert ? Dans notre cas :

22

Page 23: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

La pratiqueWizard ika;

ika.etat = true;

ika.vie = 20;

ika.mana = 0;

ika.Engage(10);

Wizard *p_ika = &ika;

p_ika ->vie--;

ika->Engage(1);

23

Page 24: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Constructeur / Destructeur Initialisation préalable des données

avant toute utilisation de l’objetmettre les PV à 20avoir un magicien vivant

Constructeur : appelé à la création de l’objet

Destructeur : appelé à la destruction

24

Page 25: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Constructeur / Destructeurclass Wizard {

public:

Wizard() {

etat = true;

vie = 20;

mana = 0;

}

~Wizard() {

}

};

25

Page 26: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

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 PRECAUTION1 NEW = 1 DELETE

26

Page 27: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Membres privés / publiques public / private / protected Encapsulation :

cacher des membres à l’extérieurs’assurer qu’ils ne seront pas modifiéscréation d’une interface utilisateur de l’objet

27

Page 28: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Pour épater les voisins

28

Page 29: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

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;

29

Page 30: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Dérivationclass WhiteWizard:Wizard{

public:void Heal();

}

Wizard w; WhiteWizard ww;ww.Engage(1);ww.Attaque(w);w.Engage(2);w.Attaque(ww);

30

Page 31: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Dérivation

Wizard *p_w = &ww;

p_w->Engage(3); // OK

p_w->Heal(); // NOK

31

Page 32: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

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

Page 33: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Fonctions virtuelles

33

Page 34: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Fonction virtuelle pure

la contrainte en plus !

class Wizard {

public:

virtual void Heal() = 0;

};

Rend la classe de base abstraite.

34

Page 35: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Surcharge (bis)

Surcharge des fonctions et des opérateurs possible

Friend (non explicité ici) exemple : matrices

35

Page 36: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

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

36

Page 37: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

STL

Standard Template Library Bibliothèque standard (dans la norme

C++) offre des types et des fonctions utiles.

Dans le namespace std:: Conteneurs

37

Page 38: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

En vrac …

string vector list map set …

38

Page 39: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Notion d’itérateur

Permet de parcourir le conteneur Syntaxe unifiée Similaire aux pointeurs Exemples

39

Page 40: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Pourquoi utiliser la STL ?

Réinventer la roue ??? Eviter les bugs (fuites de mémoire

principalement) Simplicité d’utilisation Efficacité

Ecriture du codeCode

40

Page 41: Ikariya@via.ecp.fr. Erratum C Surcharge For(int x=0; … 2

Apres cette courte présentation …A vos compilateurs !

41