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

Preview:

Citation preview

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

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

Prérequis

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

5

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

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

What’s new ?

8

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

What’s new ?

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

10

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

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

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

Références - exemple

14

Namespaces

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

15

Templates

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

Rien de plus ici …

16

Une nécessité !

17

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

Définition de l’objet

class Wizard {

public:

void Attaque(Wizard &adv) {

}

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

int mana, vie;

bool etat;

};

19

Erreurs courantes

CompilationSyntaxeWarning

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

implémentées, non trouvées …

Exécutionsegfault

20

Organisation des fichiers

Rappel compilation / édition de liens Organisation des fichiers :

21

Précompilation

A quoi ca sert ? Dans notre cas :

22

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

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

Constructeur / Destructeurclass Wizard {

public:

Wizard() {

etat = true;

vie = 20;

mana = 0;

}

~Wizard() {

}

};

25

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

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

Pour épater les voisins

28

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

Dérivationclass WhiteWizard:Wizard{

public:void Heal();

}

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

30

Dérivation

Wizard *p_w = &ww;

p_w->Engage(3); // OK

p_w->Heal(); // NOK

31

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

Fonctions virtuelles

33

Fonction virtuelle pure

la contrainte en plus !

class Wizard {

public:

virtual void Heal() = 0;

};

Rend la classe de base abstraite.

34

Surcharge (bis)

Surcharge des fonctions et des opérateurs possible

Friend (non explicité ici) exemple : matrices

35

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

36

STL

Standard Template Library Bibliothèque standard (dans la norme

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

Dans le namespace std:: Conteneurs

37

En vrac …

string vector list map set …

38

Notion d’itérateur

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

39

Pourquoi utiliser la STL ?

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

principalement) Simplicité d’utilisation Efficacité

Ecriture du codeCode

40

Apres cette courte présentation …A vos compilateurs !

41

Recommended