agenda - lirmm.frbosio/hmee325/01-intro-oop.pdf · concernant le c++. n version amélioré du...
TRANSCRIPT
22/09/16
1
MASTER EEA 2ème année
HMEE325 : Optimisation et
programmation avancée Langage C/C++: introduction
Alberto BOSIO [email protected]
http://www.lirmm.fr/~bosio/HMEE325
2
Agenda
n Introduction n La programmation orientée objet n Gestion dynamique de la mémoire n Bibliothèque standard
22/09/16
2
3
Bibliographie
n Internet n http://www.cppreference.com/index.html
Free book : Thinking in C++ n http://www.mindview.net/Books/TICPP/
ThinkingInCPP2e.html
n …
n Livre: n STROUSTRUP B. , « Le Langage C++ (Edition
Spéciale, Revue et Corrigée) », Pearson Education , 2006, 1098 p.
Prérequis
n Programmation en langage C n Utilisation des types des données
complexe n struct, array
n Gestion dynamique de la mémoire n malloc (), free ()
4
22/09/16
3
5
Historique n Au début des années 80, Bjarne Stroustrup créé le C++
n Besoins : n programmation orientée objets toucher un large public
n C++ créé sur la base du C n compatibilité : tout programme C peut être compilé en C++. n pas de standard ANSI C++ mais ajout à l'ANSI C des spécifications
concernant le C++. n Version amélioré du langage C
n Il support l’abstraction des données n Il support la programmation orientée objet n Il support la programmation générique (template)
Paradigmes de programmation
n Programmation procédurale n Programmation modulaire n Programmation orientée objet
6
22/09/16
4
Paradigmes de programmation
n Programmation procédurale n L’effort sera mis sur le traitement, c’est-à-
dire l’algorithme nécessaire pour effectuer les calculs désiré
7
Paradigmes de programmation
n Programmation modulaire: n l’effort commence a passer sur
l’organisation des données n On appelle module un ensemble de
procédures connexes avec les données qu’elles manipulent
8
22/09/16
5
Exemple
n Écrire un programme capable de modéliser un rectangle pour calculer sa surface et son périmètre
9
Problèmes
n On ne peut pas garantir l’initialisation avant la première utilisation
n On peut manipuler les données directement
n Difficile à étendre
10
22/09/16
6
Paradigmes de programmation
n Programmation orientée objet : n Organisation des données n Définition d’une interface pour accéder et
manipuler les données n Constituée par un ensemble de procédures
strictement liées aux données
11
Exemple (rectangle) class rectangle {/* definitions des donnees */private:
int a;int b;int s;int p;
/* interface : fonctions membre */public:
rectangle ();~rectangle ();int surface ( ); int perimetre ( );
}; 12
22/09/16
7
Exemple (rectangle)
n Code de l’interface rectangle::rectangle () {
a = 0;b = 0;
}rectangle::~rectangle () {}
int rectangle::surface ( ) {return ( a * b);
}int rectangle::perimetre ( ) {
return ( (a + b) * 2 );}
13
Exemple (rectangle)
n Main
int main (void) {rectangle l_rect;cout << “insert a : “; //printf (" insert a : ");cin >> l_rect.a; // scanf ("%d", &l_rect.a);cout << " insert b : ”; // printf (" insert b : ");cin >> l_rect.b; // scanf ("%d", &l_rect.b);
printf (" surface = %d \n", l_rect.surface ( ));printf (" perimetre = %d \n", l_rect.perimetre ( ));
}14
22/09/16
8
n Main
int main (void) {rectangle l_rect;cout << “insert a : “; //printf (" insert a : ");cin >> l_rect.a; // scanf ("%d", &l_rect.a);cout << " insert b : ”; // printf (" insert b : ");cin >> l_rect.b; // scanf ("%d", &l_rect.b);
printf (" surface = %d \n", l_rect.surface ( ));printf (" perimetre = %d \n", l_rect.perimetre ( ));
}
Exemple (rectangle)
15
main.cpp: In function 'int main()': rectangle.h:23: error: 'int rectangle::a' is private main.cpp:23: error: within this context rectangle.h:24: error: 'int rectangle::b' is private main.cpp:25: error: within this context
Exemple (rectangle) // definitionsvoid set_a (int pa);void set_b (int pb);….// implantationsvoid rectangle::set_a (int pa) {
if (pa >= 0) // controla = pa;
else a = 0;}void rectangle::set_b (int pb) {
if (pb >= 0) // controlb = pb;
else b = 0;}
16
22/09/16
9
Exemple (rectangle) int main (void) {
rectangle l_rect; int la, lb; printf (" insert a : "); scanf ("%d", &la); printf (" insert b : "); scanf ("%d", &lb);
l_rect.set_a (la); l_rect.set_b (lb); printf (" surface = %d \n", l_rect.surface ( )); printf (" perimetre = %d \n", l_rect.perimetre ( ));
} 17
Avantages
n l’initialisation avant la première utilisation est garantie
n On ne peut pas manipuler les données directement
18
22/09/16
10
Definitions
n Une classe se définit en C++ par un ensemble de données membres et de fonctions membres servant à manipuler les données
n Un objet est une instance d’une classe
19
20
Les fonctions membres d’une classe
n Différents types de fonctions membres n Les accesseurs et manipulateurs
permettent respectivement n d’accéder aux informations privées contenues
dans les objets n de modifier les informations privées contenues
dans les objets
22/09/16
11
21
Les fonctions membres d’une classe n Différents types de fonctions membres
n Les constructeurs permettent d’initialiser automatiquement les objets d’une classe lors de leur déclaration
n Un constructeur est une fonction membre de même nom que la classe et qui n’admet pas de type de retour
n Une classe possède au moins un constructeur n Une classe peut posséder plusieurs constructeurs (de
prototypes différents)
n Le destructeur permet de détruire automatiquement les objets à la fin de leur vie
n Un destructeur est une fonction membre de nom, le nom de la classe précédé du caractère ‘~’ et qui n’admet pas de type de retour
n Une classe possède au plus un destructeur
Exemple (rectangle)
n Classe rectangle avec plusieurs constructeurs
rectangle (); // defaultrectangle (int pa, int pb); // 2° constructor
22
22/09/16
12
Exemple (rectangle)
n Utilisation int main (void) {rectangle l_rect;rectangle l_rect_v2 (4,5);
…}
23
Héritage
n Définir une nouvelle classe à partir de classes déjà existantes
n Par dérivation n Héritage simple : à partir d’une classe n Héritage multiple : à partir de plusieurs
classes
24
22/09/16
13
Exemple
n Modéliser un carré pour calculer sa surface et son périmètre
25
Exemple class rectangle {/* definitions des donnees */private:
int a; int s;int b; int p;
/* interface : fonctions membre */public:
rectangle ();~rectangle ();int surface ( ); int perimetre ( );
int set_a (int pa); int set_b (int pb); }; 26
22/09/16
14
Exemple class carre : private rectangle {
/* interface */public:
carre ();~carre ();
void set (int pa);};
27
Exemple carre::carre () {}
carre::~carre () {}
void carre::set (int pa) {rectangle::set_a (pa);rectangle::set_b (pa);
}
28
22/09/16
15
29
Appel des constructeurs et destructeurs
n Constructeur sans arguments
30
Appel des constructeurs et destructeurs
n Quand on déclare un objet de la classe B, le compilateur fait automatiquement appel : n Au constructeur de A pour initialiser la
partie de A, puis n Au constructeur de B pour initialiser la
partie de B
22/09/16
16
31
Appel des constructeurs et destructeurs
n Quand on déclare un objet de la classe B, le compilateur fait automatiquement appel : n Au constructeur de A pour initialiser la
partie de A, puis n Au constructeur de B pour initialiser la
partie de B
Seulement si le constructeur est sans arguments
32
Appel des constructeurs et destructeurs
n En cas de destruction d’un objet de la classe B, le compilateur fait automatiquement appel : n Au destructeur de B, puis n Au destructeur de A
22/09/16
17
33
Constructeur avec arguments class rectangle {private:
int a;int b;
public:rectangle ();rectangle (int pa, int pb);~rectangle ();
void set_a (int pa);void set_b (int pb);
int surface ( ); int perimetre ( );
};
class carre : public rectangle {
public:
carre (int p);~carre ();
void set (int pa);
};
34
Constructeur avec arguments rectangle::rectangle (int pa, int pb) {
cout << " rectangle constructor " << endl;set_a (pa);set_b (pb);
}
carre::carre (int p): rectangle (p,p) {cout << " carre constructor " << endl;
}
22/09/16
18
Constructeur avec arguments
n Main int main (void) {
rectangle l_rect (4, 5);carre l_carre (3);
return 0;}
n Déterminer les résultats en sortie
35
Inheritance
Class A {Private: // only members of class A can access defaultProtected:// only members of class A can access or member of derived classPublic: // everybody can access
};
36
22/09/16
19
Inheritance
Class D: private B { … };Class D: protected B { … };Class D: public B { … };
37
Inheritance
n If B is a private base: n Its public and protected members can be
used only by D
n If B is a protected base: n Its public and protected members can be
used only by D and any class derived from D
38