Download - Introduction au C++
![Page 2: Introduction au C++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/2.jpg)
2
Erratum C
Surcharge For(int x=0; …
![Page 3: Introduction au C++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/3.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/4.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/5.jpg)
5
Prérequis
Introduction au C Problématiques du C Un peu de pratique (GCC, VC ou autre)
![Page 6: Introduction au C++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/6.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/7.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/8.jpg)
8
Nouveautés syntaxiques
What’s new ?
![Page 9: Introduction au C++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/9.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/10.jpg)
10
What’s new ?
bool Surcharge de fonctions, d’opérateurs Références Namespaces Fonction templates Nouveaux headers
![Page 11: Introduction au C++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/11.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/12.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/13.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/14.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/15.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/16.jpg)
16
Templates
Ecrire du code génériqueDans les structuresDans les fonctions
Rien de plus ici …
![Page 17: Introduction au C++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/17.jpg)
17
Avoir la classeUne nécessité !
![Page 18: Introduction au C++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/18.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/19.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/20.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/21.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/22.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/23.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/24.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/25.jpg)
25
Constructeur / Destructeurclass Wizard {public:
Wizard() {etat = true;vie = 20;mana = 0;
}
~Wizard() {}
};
![Page 26: Introduction au C++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/26.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/27.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/28.jpg)
28
Plus de classePour épater les voisins
![Page 29: Introduction au C++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/29.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/30.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/31.jpg)
31
Dérivation
Wizard *p_w = &ww;
p_w->Engage(3); // OK
p_w->Heal(); // NOK
![Page 32: Introduction au C++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/32.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/33.jpg)
33
Fonctions virtuelles
class Wizard {public:
virtual void Heal(){
vie++;}
}
class WhiteWizard {public:
virtual void Heal(){
SummonAura();Wizard::Heal();
}};
![Page 34: Introduction au C++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/34.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/35.jpg)
35
Surcharge (bis)
Surcharge des fonctions et des opérateurs possible
Friend (non explicité ici) exemple : matrices
![Page 36: Introduction au C++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/36.jpg)
36
Intro à la STLComment éviter de refaire des choses déjà (bien) faites
![Page 37: Introduction au C++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/37.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/38.jpg)
38
En vrac …
string vector list map set …
![Page 39: Introduction au C++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/39.jpg)
39
Notion d’itérateur
Permet de parcourir le conteneur Syntaxe unifiée Similaire aux pointeurs Exemples
![Page 40: Introduction au C++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/40.jpg)
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++](https://reader035.vdocuments.us/reader035/viewer/2022070400/568134a5550346895d9bae5d/html5/thumbnails/41.jpg)
41
Des questions ?
Apres cette courte présentation …A vos compilateurs !