Formation C - PowerPoint PPT Presentation

1 / 52
About This Presentation
Title:

Formation C

Description:

Formation C++ Hello World ! Nouveaut s de syntaxe en C++ Surcharge de fonctions, d op rateurs R f rences Namespace (non abord ) Fonctions templates (non ... – PowerPoint PPT presentation

Number of Views:49
Avg rating:3.0/5.0
Slides: 53
Provided by: ClaireA154
Category:
Tags: formation | prive

less

Transcript and Presenter's Notes

Title: Formation C


1
Formation C
2
Hello World !
include ltiostreamgt / Commentaire sur plusieurs
lignes / int main() //Affiche hello
world stdcout ltlt "Hello World ! ltlt
stdendl
3
Nouveautés de syntaxe en C
  • Surcharge de fonctions, dopérateurs
  • Références
  • Namespace (non abordé)
  • Fonctions templates (non abordé)

4
Surcharge de fonction
void f(int i) int f(double i) void f(int
a,int b) // ERREUR // Diffère uniquement
par // le type de retour double f(int i)
5
Attention aux ambiguïtés
  • void f(int a, double b)
  • void f(double a, int b)
  • int a,b
  • f(a,b) // ??
  • f((double)a,b) //ok
  • Le mieux est encore de ne pas écrire deux
    fonctions aux paramètres si proche lun de
    lautre !

6
Opérateurs
  • Mathématiques , -, , /, , , --
  • Logiques , , !, , !, lt, gt, lt, gt
  • Données , , -gt
  • Binaire , , , , ltlt, gtgt
  • Assignation , , /, , , -, ltlt, gtgt,
    , ,
  • Tous surchargeables.

7
Références
  • Permettent de passer la variable plutôt que la
    copie.
  • Evite la recopie de la variable (gain en rapidité
    pour de grosses structures).
  • Permet de simplifier lécritures de fonctions qui
    écrivent dans une variable.

8
Référence
void Double(int x) x2 Double(a) //a
4
void Double(int x) x2 int
a2 Double(a) //a2
void Double(int x) x2 Double(a) //a4
9
Quest ce quun objet ?
  • Un type qui regroupe des informations (membres),
    et qui offre des moyens de les traiter (grâce à
    des méthodes).

Exemple objet joueur Membres points de
vie envie de manger état (mort ?)
Méthodes Attaqué par Mange
10
Comment définir un objet en C
class CJoueur public void AttaqueDe(CJoueur
J) Vie - J.Vie EnvieManger 10 Mort
((Vielt0)(EnvieMangergt100)) void
Mange() EnvieManger0 int Vie, EnvieManger
bool Mort
11
Structure des fichiers dun projet C
Link
Compilation
12
Les erreurs
  • Compilation
  • Syntaxe (erreurs)
  • Warnings
  • Linkage
  • Fonctions et variables déclarées, non
    implémentées
  • Exécution
  • Segfault

13
Organisation des fichiers
Joueur.h class CJoueur public void
AttaqueDe(CJoueur J) void Mange() int Vie,
EnvieManger bool Mort
Joueur.cpp void CJoueurAttaqueDe(CJoueur
J) Vie - J.Vie EnvieManger 10 Mort
((Vielt0)(EnvieMangergt100)) void
CJoueurMange() EnvieManger0
14
Pré compilateur
Joueur.h ifndef JOUEUR_H define
JOUEUR_H Class CJoueur / / endif
Joueur.cpp include Joueur.h void
CJoueurAttaqueDe(CJoueur J)
15
Utilisation de lobjet
  • CJoueur J
  • J.Mortfalse
  • J.Vie100
  • J.Mange()

CJoueur pJ (p).Vie100 p-gtVie100 p-gtMange(
)
16
Constructeur destructeur
  • Initialisation des données on veut quà la
    création de la variable notre joueur soit vivant
    sans avoir besoin de le dire !
  • Constructeur fonction appelée à la création de
    lobjet (pour linitialisation)
  • Destructeur fonction appelée à la destruction
    de lobjet

17
Constructeur destructeur
class CJoueur public CJoueur() Vie100
EnvieManger0 Mortfalse CJoueur()

18
new et delete, création dynamique dobjets
  • malloc et free (du C) ne peuvent être utilisés
    car on a besoin dappeler le constructeur et le
    destructeur de lobjet
  • new T retourne un pointeur vers une zone de
    donnée allouée par lOS pour stocker un objet de
    type T.
  • delete p informe lOS que la mémoire
    préalablement allouée par un new nest plus utile.

Toujours autant de new que de delete ! (règle
sans aucune exception !)
19
Membres privés, publics
  • Cacher des membres et des propriétés à
    lextérieur
  • Assurer que les données ne seront pas modifiées
    par lextérieur
  • Indiquer à lutilisateur les membres et méthodes
    dont il aura besoin
  • Conseil mettre les membres en privé, avec au
    besoin des méthodes Get-Set

20
Membres privés, publics
class CJoueur public CJoueur() CJoueur()
void AttaqueDe(CJoueur J) void Mange() bool
IsDead() private int Vie, EnvieManger bool
Mort
21
Dérivation
  • Créer un nouvel objet, plus spécifique, à partir
    dun objet de base
  • CJoueur -gt CJoueurHumain, CJoueurZerg,
    CJoueurProtoss
  • (CJoueur)CJoueurHumain
  • (CJoueurHumain)CJoueur

22
Dérivation
class CJoueurZerg public CJoueur public voi
d SayGrrrgg()
CJoueurZerg Zergling CJoueur J Zergling.Mange()
J.AttaqueDe(Zergling) Zergling.SayGrrrgg() CJ
oueur pZergling p-gtSayGrrrgg() //Error
23
Fonctions virtuelles
  • CJoueurHumain, CJoueurProtoss et CJoueurZerg ne
    mangent pas de la même façon. Pourtant on veut
    que tout CJoueur puisse manger.

24
Fonctions virtuelles
class CJoueur public virtual void
Mange() EnvieManger0
class CJoueurZerg public CJoueur public void
Mange() SayGrrrgg() CJoueurMange()

25
Fonctions virtuelles
CJoueurZerg Over CJoueur J CJoueur
POver J.Mange() Over.Mange() P-gtMange()
26
Fonctions virtuelles pures
  • On ne sait pas définir CJoueurMange, on veut
    que les classes dérivées soient contraintes
    dimplémenter Mange()

class CJoueur public virtual void
Mange()0
27
Fonctions virtuelles pures
class CJoueurZerg public CJoueur public void
Mange() SayGrrrgg() EnvieManger0
CJoueurZerg Hydra Hydra.Mange() CJoueur
J //Erreur CJoueur PHydra P-gtMange() //OK
28
Fonctions virtuelles pures
class CJoueurHumain public CJoueur class
CCapitaine public CJoueurHumain public void
Mange() / /
CJoueur J //Erreur CJoueurHumain J
//Erreur CCapitaine Capitaine CJoueur
PCapitaine P-gtMange() //OK
29
class CMatrix public CMatrix()
CMatrix(const CMatrix m) double
operator()(int i,int j) return
Datasij CMatrix operator(CMatrix
m) CMatrix operator(double d) CMatrix
operator(CNmatrix m) CMatrix
operator(CMatrix m) CMatrix
operator-() friend CMatrix operator(double
r,CMatrix m) private double Datas33
30
CMatrixCMatrix(const CMatrix m) thism
CMatrix CMatrixoperator(CMatrix
m) for(int i0ilt3i) for(int
j0jlt3j) (this)(i,j)m(i,j) return
this
31
CMatrix CMatrixoperator(double d) for(int
i0ilt3i) for(int j0jlt3j) (this)(i,j
)d return this CMatrix
CMatrixoperator(double r,CMatrix
m) CNmatrix R(m) return Rr
32
CMatrix CMatrixoperator(CNmatrix
m) for(int i0ilt3i) for(int
j0jlt3j) (this)(i,j)m(i,j) return
this CMatrix CMatrixoperator(CMatrix
m) CMatrix R(this) return Rm CMatrix
CMatrixoperator-() return -1(this)
33
Analyse dune opération
CMatrix a,b,c //Initialisation de a et
b c2ab c.operator(operator(2,a).operator(
b)) CMatrix dc CMatrix d(c)
34
La STL
  • Standard Template Library
  • Bibliothèque standard (elle fait partie de la
    norme C) qui offre des types de variables et
    des fonctions utiles
  • Toutes les noms sont précédées de std
  • stdstring, stdvector, stdlist, stdsort

35
stdstring (ltstringgt)
  • Chaîne de caractères
  • stdstring MonNomVincent
  • MonNom.size()7
  • MonNom Lascaux
  • MonNomVincent Lascaux
  • MonNom0V MonNom3c

36
stdvector (ltvectorgt)
  • Container standard tableau (acces rapide au n
    élément (O(1)), insertion lente (O(n)) )
  • stdvectorltintgt Tableau
  • Tableau.resize(20)
  • Tableau012 Tableau142
  • for(int i2ilt20i) Tableauiii
  • Tableau.reserve(40)
  • for(int i0ilt20i)
  • Tableau.push_back(12)

37
stdlist (ltlistgt)
  • Une liste chaînée (acces lent au n élément
    (O(n)), insertion rapide (O(1)) )
  • stdlistltstdstringgt Liste
  • Liste.push_back(CNedra)
  • Liste.push_back(rulez)
  • Liste.push_front(See how )
  • //Liste See how, CNedra, rulez

38
Itérateurs
  • Permet de parcourir un container
  • Unifie la syntaxe (tous les containers se
    parcourent de la même façon, que ce soient
    tableau, liste, arbre ou autre)
  • Sutilise comme un pointeur (le container pointe
    sur un objet du container).

39
Itérateurs
int Somme0 for(stdvectorltintgtiterator
itTableau.begin() it!Tableau.end()it) Somme
it
int Somme0 for(stdlistltintgtiterator
itListe.begin() it!Liste.end()it) Sommei
t
40
Les avantages de la STL
  • Ne pas réinventer la roue
  • Eviter des bugs(memory leaks la STL ne bug
    pas)
  • Se simplifier la vieOpérateurs usuels (, , lt,
    gt)
  • Efficacité
  • Décriture du code
  • Du code

41
Tutoriaux
  • Thinking in C
  • STL aide de tout bon compilo, tutoriaux sur le
    net, MSDN
  • Google est ton ami

42
Un peu de C
43
Les variables
  • int a
  • int a,b
  • int a2
  • int a2, b3

int Puissance4(int x) int carre carrexxre
turn carrecarre
44
Quelques exemples
Types entiers char, int, short, long Types
réels float, double Evite dutiliser le
préfixe std avec la ligne using namespace std
include ltiostreamgt int main() stdcout ltlt
Hello World\n return 0
//Retourne le double de x int Double(int
x) return 2x
45
Pointeurs
  • Un type de variable stockant ladresse dune zone
    en mémoire
  • Une valeur particulière NULL

int a int p pa p2 //a2 a3 //p3
Surtout utile pour les structures classiques
(listes chaînées, arbres binaires)
46
Contrôle du flux
  • Condition
  • if else
  • Boucles do-while, while
  • Boucle for

47
Condition
  • Le type dune condition est bool, il peut prendre
    les valeurs true ou false. Les nombres entiers
    peuvent être testée
  • 0 ? false, autre nombre ? true
  • lt, lt, gt, gt, , !
  • , , !
  • A3 B2 ? A((3 B)2)
  • (A3) (B2)

48
if - else
int sign(int x) if(xlt0) return -1
else return 1
int sign(int x) if(xlt0) return -1 else
return 1
49
Boucles do-while et while
int Age do coutltlt"Quel est votre age
?ltltendl cin gtgt Age while(Agelt0)
while(OnmEcoute()) Dit_un_mot()
50
Boucle for
int i for(i0ilt10i) cout ltlt 10 fois
for(int i0ilt10i) cout ltlt 10 fois
for(Init Condition Step) Code Init
while(Condition) Code Step
51
Transtypage (cast)
  • Changer le type dune expression
  • double a (int)a
  • int a (double)a
  • Transtypage implicite
  • double Carre(double a) return aa
  • Carre(2) //Carre((double)2), Carre(2.)

52
const
  • Problème des références on ne sait plus si
    largument sera ou non modifié
  • const permet dindiquer que largument ne pourra
    être modifié
  • Erreur à la compilation si une fonction modifie
    un argument const (par une affectation, ou
    lappel dune méthode non const)
Write a Comment
User Comments (0)
About PowerShow.com