Introduction au C++

41
INTRODUCTION AU C++ [email protected] r

description

Introduction au C++. [email protected]. 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 - PowerPoint PPT Presentation

Transcript of Introduction au C++

Page 1: Introduction au C++

INTRODUCTION AU C++

[email protected]

Page 2: Introduction au C++

2

Erratum C

Surcharge For(int x=0; …

Page 3: Introduction au C++

3

Au menu

IntroductionPrérequisDocumentationProblématiques

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

Page 4: Introduction au C++

4

Introduction

Langage TRES répanduPerformancesPortabilitéRigueur… 

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

Ca s’apprend par la pratique !

Page 5: Introduction au C++

5

Prérequis

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

Page 6: Introduction au C++

6

Sources de documentation - Bis

Internethttp://www.developpez.com/Google…

Bouquins divers et variés(mais ca coûte cher et utilitévariable)

Cédricstilgar sur IRC

Page 7: Introduction au C++

7

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

Page 8: Introduction au C++

8

Nouveautés syntaxiques

What’s new ?

Page 9: Introduction au C++

9

Hello World des temps modernes

#include <iostream>

/* CommentairesMulti-lignes */

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

}  

Page 10: Introduction au C++

10

What’s new ?

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

Page 11: Introduction au C++

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

Page 12: Introduction au C++

12

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;

}

Page 13: Introduction au C++

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)

Page 14: Introduction au C++

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

Page 15: Introduction au C++

15

Namespaces

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

Page 16: Introduction au C++

16

Templates

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

Rien de plus ici …

Page 17: Introduction au C++

17

Avoir la classeUne nécessité !

Page 18: Introduction au C++

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

Page 19: Introduction au C++

19

Définition de l’objet

class Wizard {public:

void Attaque(Wizard &adv) {…}void Engage(int i) { mana += i; }

int mana, vie;bool etat;

};

Page 20: Introduction au C++

20

Erreurs courantes

CompilationSyntaxeWarning

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

implémentées, non trouvées … Exécution

segfault

Page 21: Introduction au C++

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; bool etat;};

Wizard.cpp

void Wizard::Attaque(Wizard &adv){

…}void Wizard::Engage(int i) {

mana += i;}

Page 22: Introduction au C++

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"

void Wizard::Attaque(Wizard &adv)…

Page 23: Introduction au C++

23

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

Page 24: Introduction au C++

24

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

Page 25: Introduction au C++

25

Constructeur / Destructeurclass Wizard {public:

Wizard() {etat = true;vie = 20;mana = 0;

}

~Wizard() {}

};

Page 26: Introduction au C++

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

Page 27: Introduction au C++

27

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

Page 28: Introduction au C++

28

Plus de classePour épater les voisins

Page 29: Introduction au C++

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;

Page 30: Introduction au C++

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

Page 31: Introduction au C++

31

Dérivation

Wizard *p_w = &ww;

p_w->Engage(3); // OK

p_w->Heal(); // NOK

Page 32: Introduction au C++

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

Page 33: Introduction au C++

33

Fonctions virtuelles

class Wizard {public:

virtual void Heal(){

vie++;}

}

class WhiteWizard {public:

virtual void Heal(){

SummonAura();Wizard::Heal();

}};

Page 34: Introduction au C++

34

Fonction virtuelle pure

la contrainte en plus !

class Wizard {

public:

virtual void Heal() = 0;

};

Rend la classe de base abstraite.

Page 35: Introduction au C++

35

Surcharge (bis)

Surcharge des fonctions et des opérateurs possible

Friend (non explicité ici) exemple : matrices

Page 36: Introduction au C++

36

Intro à la STLComment éviter de refaire des choses déjà (bien) faites

Page 37: Introduction au C++

37

STL

Standard Template Library Bibliothèque standard (dans la norme

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

Dans le namespace std:: Conteneurs

Page 38: Introduction au C++

38

En vrac …

string vector list map set …

Page 39: Introduction au C++

39

Notion d’itérateur

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

Page 40: Introduction au C++

40

Pourquoi utiliser la STL ?

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

principalement) Simplicité d’utilisation Efficacité

Ecriture du codeCode

Page 41: Introduction au C++

41

Des questions ?

Apres cette courte présentation …A vos compilateurs !