[email protected]. erratum c surcharge for(int x=0; … 2
TRANSCRIPT
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