AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i;...

37
AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void) { return i; } void Ecrit_i(int iVal) { i=iVal; } clEntier.h clEntier.cp p clEntier.h indispensable

Transcript of AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i;...

Page 1: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class Entier{ int i; int lit_i(void); void Ecrit_i(int);};

int Entier::lit_i(void){ return i;}

void Ecrit_i(int iVal){ i=iVal;}

clEntier.h clEntier.cpp clEntier.h

indispensable

Page 2: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

struct class

en C :

juste Donnée

en C++:

données + Méthode

only public

en C++:données + MéthodePrivate ou public

2 possibilitées : public ou private.

public: accès total aux données et aux méthodes membres

private : accès réservé aux méthodes membres de la class

Page 3: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class Client{ private : //pas necessaire

char Nom[20], Prenom[25];int Date, Solde;

public :

bool Dans_le_Rouge(void){ return (Solde<0);}bool Bon_Client(void){ return (date<1996);}

};

int main (){ Client Clientelle[100]; //tableau d'objets for (int i=0;1<100;i++) {

if(Clientelle[i].Dans_le_Rouge()) cout << "Il est dans le rouge!";

}}

Page 4: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

Le constructeur porte le même nom que la classe.

Le destructeur idem sauf qu'il est précéder d'un tilde '~'.

class Chaine{ char * s;

public : Chaine(void); Chaine(int); ~Chaine(void);};

#include "clChaine.h"

Chaine::Chaine(void);{ s=NULL;}Chaine::Chaine(int Taille){ s=new char[Taille+1]; S=[0]='\Ø';}Chaine::~Chaine(void){ if(s) delete[] s;}

"include "clChaine.h"int main(){ Chaine s1; Chaine S2(100);}

clChaine.h clChaine.cpp pgprinc.cpp

Liberation dynamique de tout le contenu du pointeur

Page 5: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

Ordre a retenir :

-Création de l'espace mémoire pour la variable

- Appel du constructeur(puis allocation dynamique si nécessaire)

- Appel du destructeur(puis libération si nécessaire)

- Vidage de la variable dans la pile

Page 6: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class clPhy{ //Donnees

//Methodes

};

clPhy X1;clPhy X2(X1);

On fait appel au constructeur par recopie par défaut. Il prend chacune des données de X1 et les recopie dans X2

Page 7: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class clElt{ int L,C,V; clElt *pSuiv;}

ClElt X1;clelt X2(X1);

X1

Page 8: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class clElt{ int L,C,V; clElt *pSuiv;}

ClElt X1;clelt X2(X1);

L

C

V

X1

Page 9: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class clElt{ int L,C,V; clElt *pSuiv;}

ClElt X1;clelt X2(X1);

L

C

V

X1

X2

Page 10: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class clElt{ int L,C,V; clElt *pSuiv;}

ClElt X1;clelt X2(X1);

L

C

V

X1

L

C

V

X2

Page 11: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class clElt{ int L,C,V; clElt *pSuiv;}

ClElt X1;clelt X2(X1);

L

C

V

X1

L

C

V

X2

c'est une recopie en profondeur, pas par défaut

Page 12: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

clElt (const clElt & X);

il s'appelle comme le nom de la classe :

en général constructeur par recopie, destructeur et opérateur d'affectation vont ensemble.

Page 13: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class Simple{ int X; bool Y;

public:

}X1;

Simple X2(X1);Simple X3;X3=X1;

Classe qui ne contient pas de pointeur : dans ce cas, constructeur par recopie, destructeur et opérateur par défaut.

x 1

y 2

X1

Page 14: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class Simple{ int X; bool Y;

public:

}X1;

Simple X2(X1);Simple X3;X3=X1;

Classe qui ne contient pas de pointeur : dans ce cas, constructeur par recopie, destructeur et opérateur par défaut.

x 1

y 2

X1

x 1

y 2

X2

Page 15: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class Simple{ int X; bool Y;

public:

}X1;

Simple X2(X1);Simple X3;X3=X1;

Classe qui ne contient pas de pointeur : dans ce cas, constructeur par recopie, destructeur et opérateur par défaut.

x 1

y 2

X1

x 1

y 2

X2

x

y

X3

Page 16: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class Simple{ int X; bool Y;

public:

}X1;

Simple X2(X1);Simple X3;X3=X1;

Classe qui ne contient pas de pointeur : dans ce cas, constructeur par recopie, destructeur et opérateur par défaut.

x 1

y 2

X1

x 1

y 2

X2

x 1

y 2

X3

Page 17: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class Compose{ int X; bool Y; int *p;

public:

}X1;

Simple X2(X1);Simple X3;X3=X1;

un pointeur surcharge d'opérateur

x 1

y 2

p

X1

Page 18: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class Compose{ int X; bool Y; int *p;

public:

}X1;

Simple X2(X1);Simple X3;X3=X1;

un pointeur surcharge d'opérateur

x 1

y 2

p

X1

x

y

p

X2

Page 19: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class Compose{ int X; bool Y; int *p;

public:

}X1;

Simple X2(X1);Simple X3;X3=X1;

un pointeur surcharge d'opérateur

x 1

y 2

p

X1

x 1

y 2

p

X2

Page 20: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class Compose{ int X; bool Y; int *p;

public:

}X1;

Simple X2(X1);Simple X3;X3=X1;

un pointeur surcharge d'opérateur

x 1

y 2

p

X1

x 1

y 2

p

X2

x

y

p

X2

Page 21: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class Compose{ int X; bool Y; int *p;

public:

}X1;

Simple X2(X1);Simple X3;X3=X1;

un pointeur surcharge d'opérateur

x 1

y 2

p

X1

x 1

y 2

p

X2

x 1

y 2

p

X2

Page 22: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)

AP4 - Programmation Orientée Objet

Chapitre 3 : Programmation Objet en C++

class clX{ int i;

public:

F();

}A;

A.F();clx::F();{

i=0;// this->i=0;}

this est un pointeur qui pointe vers l'objet en cours.

il est constant.

il est possible de transformer ce pointeur constant en un pointeur constant sur des données constantes pour chaque fonction membre

Page 23: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Page 24: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Page 25: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Page 26: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Page 27: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Page 28: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Page 29: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Page 30: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Page 31: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Page 32: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Page 33: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Page 34: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Page 35: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Page 36: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Page 37: AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)