Introduction au C++

Preview:

DESCRIPTION

Introduction au C++. ikariya@via.ecp.fr. 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

Citation preview

INTRODUCTION AU C++

ikariya@via.ecp.fr

2

Erratum C

Surcharge For(int x=0; …

3

Au menu

IntroductionPrérequisDocumentationProblématiques

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

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 !

5

Prérequis

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

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

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

8

Nouveautés syntaxiques

What’s new ?

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;

}  

10

What’s new ?

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

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

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;

}

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)

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

15

Namespaces

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

16

Templates

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

Rien de plus ici …

17

Avoir la classeUne nécessité !

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

19

Définition de l’objet

class Wizard {public:

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

int mana, vie;bool etat;

};

20

Erreurs courantes

CompilationSyntaxeWarning

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

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

segfault

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

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

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

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

25

Constructeur / Destructeurclass Wizard {public:

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

}

~Wizard() {}

};

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

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

28

Plus de classePour épater les voisins

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;

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

31

Dérivation

Wizard *p_w = &ww;

p_w->Engage(3); // OK

p_w->Heal(); // NOK

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

33

Fonctions virtuelles

class Wizard {public:

virtual void Heal(){

vie++;}

}

class WhiteWizard {public:

virtual void Heal(){

SummonAura();Wizard::Heal();

}};

34

Fonction virtuelle pure

la contrainte en plus !

class Wizard {

public:

virtual void Heal() = 0;

};

Rend la classe de base abstraite.

35

Surcharge (bis)

Surcharge des fonctions et des opérateurs possible

Friend (non explicité ici) exemple : matrices

36

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

37

STL

Standard Template Library Bibliothèque standard (dans la norme

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

Dans le namespace std:: Conteneurs

38

En vrac …

string vector list map set …

39

Notion d’itérateur

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

40

Pourquoi utiliser la STL ?

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

principalement) Simplicité d’utilisation Efficacité

Ecriture du codeCode

41

Des questions ?

Apres cette courte présentation …A vos compilateurs !