Introduction au C++
-
Upload
rosalia-woriega -
Category
Documents
-
view
20 -
download
0
description
Transcript of Introduction au C++
INTRODUCTION AU C++
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 !