agenda - lirmm.frbosio/hmee325/01-intro-oop.pdf · concernant le c++. n version amélioré du...

19
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

Upload: voxuyen

Post on 12-Sep-2018

213 views

Category:

Documents


0 download

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