Vous êtes sur la page 1sur 38

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

Enseignement : II24 & C++ - Programmation orient objet (C++)


Objectif : Ce module se situe dans la continuit des modules ii12 et ii20 et permet d'acqurir les bases de la
modlisation et de la programmation orientes objet. Le langage C++ est pris comme exemple.
Avertissement : Ce cours suppose la connaissance et la matrise du langage C

CONTENU DU COURS
.
BIBLIOGRAPHIE .................................................................................................................................................. 1
HISTORIQUE......................................................................................................................................................... 2
A.INTRODUCTION A LA POO............................................................................................................................ 2
B. LANGAGE C++................................................................................................................................................. 3
1.INCOMPATIBILITES C/C++ ............................................................................................................................. 4
2. E/S BASEES SUR LA NOTION DE FLOT....................................................................................................... 4
3. SPECIFICITES NON OBJET DU C++ .............................................................................................................. 6
5. FONCTION MEMBRE .................................................................................................................................... 15
6. FONCTION AMIE............................................................................................................................................ 18
7. HERITAGE SIMPLE........................................................................................................................................ 20
8. HERITAGE MULTIPLE .................................................................................................................................. 21
9. CONTENU DES TDs ....................................................................................................................................... 27
10. CONTENU DES TPs ...................................................................................................................................... 31
12. CARACTERISTIQUES DE JAVA................................................................................................................. 37
13. LES DIFFERENCES JAVA - C++ ................................................................................................................. 38

BIBLIOGRAPHIE
(disponible la BU de luniversit dEvry)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

Comment programmer en C++


Le C++ efficace
Visual C++ 6.
UML et C++ :guide pratique
Lessentiel du C++
Le langage C++
C++ facile
C++ FAQs
The C++ Programming Language
Programmer en langage C++

C++

Deitel, Harvey M.
Meyers, Scott
Williams, Mickey
Lee, Richard C.
Lippman, Stanley B.
Stroustrup, Bjarne
Vaiser, Didier
Cline, Marshall
Stroustrup, Bjarne
Delannoy, Claude

1999
1999
1999
1998
1999
1998
1992
1999
1997
2000

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

HISTORIQUE

Langage C, 1re version , Kernighan & Ritchie, Bell Labs AT&T


C ANSI/ISO
Langage C++, 1re version, Bjarne Stroustrup, Bell Labs AT&T
C++ ANSI/ISO

1972
1990
1982
1998

A.INTRODUCTION A LA POO
A.1 Programmation Structure & Programmation Oriente Objet

Programmation Structure
Equation de Wirth :

Algorithme + Donnes =
Programme
Programmation Oriente Objet :
Equation de la POO :

Mthodes + Donnes = Objet

A.2 Programmation Oriente Objet

Mthode

Formuler une stratgie de rsolution du problme


Isoler les objets faisant partie de la solution et identifier les oprations sur les objets
Regrouper avec chaque objet les oprations qui lui sont associes
En dduire la spcification des modules

Concepts Orients-Objet

C++

Encapsulation
Abstraction
Modularit
Classification
Typage
Hirarchie Hritage

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

A.3 Dmarche dune mthode oriente objet

Dfinir le problme
Dvelopper une stratgie informelle de rsolution
Dfinir les objets et leur attributs
Identifier les oprations sur les objets
Etablir les interfaces

Implmenter les objets


Rpter ce processus rcursivement si ncessaire
B. LANGAGE C++
Introduction
C++ = C + C + POO + POO
C : Langage C

POO : Particularits de C++ non Objet


Commentaires
Surdfinition de fonctions
Dfinition de fonction inline

C : Diffrences/ Langage C
Dfinitions de fonctions
Compatibilits entre pointeurs
Emplacements quelconques des dclarations
Nouvelles fonctions de gestion mmoire

POO : Spcificits de C++ Objet


Classe/objet
Encapsulation des donnes
Hritage
Constructeurs de classe
Fonctions amies (originalit)
Surdfinition doprateurs
Conversions explicites/implicites de classes E/S bases sur la notion de flot

(originalit)

B.2 Terminologie de base :


Programme={ fonction, bloc, variable, constante, type, instruction, oprateur}
Fonction : correspond un emplacement mmoire(adresse de dbut dun sous programme),
Bloc : ensemble de dfinitions de variables et dinstructions dlimit par {},
Variable : correspond un emplacement mmoire, elle est statique(globale) ou dynamique(locale),
Constante :

qui est le code machine du programme,


Type : dfinit les caractristiques dun ou plusieurs noms.
Nom : est un identificateur qui reprsent une fonction, ou une variable,ou une constante,
Dfinition : prsentation des caractristiques dun ou plusieurs noms et rservation de la place mmoire
ceux-ci.
Dclaration (prototype) : prsentation des caractristiques dun ou plusieurs noms,
Classe : type qui regroupe des donnes et des fonctions (mthodes) et qui prcise les droits daccs ces
derniers,
Objet : instance de la classe (variable).

C++

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

1.INCOMPATIBILITES C/C++
1.1 Dfinitions de fonction
Compatibles avec la norme ANSI
1.2 Prototypes en C et en C++ de fonctions
Def. : dclaration de lentte dune fonction dans un autre fichier source que celui o elle est dfinie.
En C : Les prototypes ne sont pas obligatoires
En C++ : Ils le sont car le C++ permet la surdfinition de fonction
Dans le cas ou la fonction na pas de paramtre ou nen renvoie pas il faut utiliser le mot cl void .
Ex : void f(void)
1.2 Qualificatif "const"
Const : permet de rendre une variable lecture seule. Ce mcanisme est fort utile pour le passage de
paramtre par adresse une fonction

2. E/S BASEES SUR LA NOTION DE FLOT


simple : permettent de saffranchir du formatage
extensible : de nouveaux types peuvent tre dfinis sous forme de classe.
Descripteurs & oprateurs
cin
cout
cerr

Flot dentre : mot cl


Flot de sortie : mot cl
Flot derreur : mot cl

avec oprateur >> (stdin)


avec oprateur << (stdout)
avec oprateur << (stderr)

Hirarchie simplifie des classes dE/S par flots :


ios

istream

ostream
Input/out
iostream

Stream
fstream

strstream
Streamed
In/Outp

In/Output
istrstream

C++

ostrstream
4

ifstream

ofstream

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

Exemples dE/S par flots :


// E/S par flots sur un fichier en ecriture
#include <iostream.h>
#include <fstream.h>
main()
{
fstream fout("f", ios::out);
fout<<"salut ceci est test\n";
}
/* Rsultat
$ more f
salut ceci est un test
*/
//____________________________________________________
// E/S par flots sur un fichier en lecture
#include <iostream.h>
#include <fstream.h>
main()
{
int i;
fstream fin("f", ios::in);
fin >> i;
cout << i;
}
/* resultat
$ ./fin
*/
//____________________________________________________
// E/S par flots en lecture en memoire
#include <iostream.h>
#include <strstream.h>
main()
{
int a;
char b;
char c[6]="2245a";
istrstream strin(c, sizeof(c));
strin >>a >>b;
cout << sizeof(c) << "\t" << a << "\t" << b;
}
/*Resultat
$./strin
6 2245 a*/
//____________________________________________________
// E/S par flots en ecriture en memoire
#include <iostream.h>
#include <strstream.h>
main()
{
int a=2345;
char b='d';
char c[6];
ostrstream strout(c, sizeof(c));
strout <<a <<b;
for (int i=0; i<6; i++)cout << c[i];
}
/* Resultat
$ ./strout
2345d*/

C++

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

3. SPECIFICITES NON OBJET DU C++


3.1 Commentaires
3.2 Dfinitions gnralises et notion de porte
3.3. Passage de paramtres une fonction
3.4 Surdfinition de fonction
3.5 Oprateurs de gestion dynamique de mmoire
3.6 Fonction "inline"

3.1 Commentaires
// : prcdent un commentaire. Celui-ci est valable jusqu' la fin de la ligne
3.2 Dfinitions gnralises et notion de porte dun nom
Une dfinition ou une dclaration peut se faire tout endroit du programme, nanmoins il est recommand
de les regrouper au dbut de chaque bloc.
La porte dun nom est la rgion du programme ou le nom peut tre utilis.
Rgle de la porte : un nom est toujours associ la dfinition le concernant la + proche syntaxiquement
(comme en C).
La porte dun nom peut tre :
Locale : noms dfinis dans un bloc, la porte du nom est le bloc.
Fonction : les arguments dune fonction sont considrs comme des noms locaux celle-ci. Les tiquettes
sont des noms qui ont une porte limite la fonction (goto <etiquette> nest possible qua lintrieur
dune fonction non recommand.
Globale : noms dfinis lextrieur de tout bloc. Leur porte est celle du fichier.

3.3. Passage de paramtres une fonction


En C, les arguments dune fonction sont passs par adresse
Exemple 3.3a:

En C++, les arguments dune fonction sont transmis par rfrence.


Exemple 3.3.b:

C++

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

3.4 Surdfinition de fonction


La surdfinition ou la surcharge dune fonction est la dfinition multiple de celle-ci avec des paramtres au
nombre et au type qui diffrent.
Les oprateurs de base sont surchargs car ils peuvent sappliquer des variables de type diffrent.
Le compilateur applique le schma de conversion :
Char, short, long
La conversion int

int double float

double nest effectue que si cela est ncessaire, les autres se font automatiquement.

Principe de la surcharge dune fonction : le compilateur tabli la meilleure correspondance entre les
paramtres effectifs(appel de fonction) et les paramtres formels(fonction appele). Si plusieurs fonctions
sont candidates, alors il ya ambigut.
La surdfinition de fonctions est aussi appel polymorphisme.
Exemple 3.4a Surdfinition dune fonction un paramtre :

Exemple 3.4b Surdfinition dune fonction deux paramtres :

3.5 Oprateurs de gestion dynamique de mmoire


En C : Les fonctions malloc() et free() sont utilises pour allouer et librer dynamiquement de la mmoire.
Exemple 3.5a :

En C++ : Ces 2 fonctions sont remplaces par 2 oprateurs new et delete afin doptimiser le temps
dexcution des programmes .
Syntaxe de new :
New type
New type[n]
New type[n][m]
Syntaxe de delete :
Delete <adresse>
Exemple 3.5b :

C++

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

3.6 Fonction "inline"


inline f()
{

}
f() ; // f est considre comme une macro
inline permet de transformer une fonction en macro. Elle doit figurer dans le mme fichier o est appele la
fonction f. Lavantage est loptimisation du temps dexcution, linconvnient est que f perd le statut de
fonction et ne peut par voie de consquence tre compile sparment des autres fonctions : Il faut placer sa
dfinition dans un fichier entte (.h) inclure dans tout fichier o f est utilise.

4. CLASSE ET OBJET
4.1 Dfinition des notions dobjet et de classe
Objet : gnralisation de la notion de variable compose ou structure. Un objet est constitu de donnes et de
fonctions.
Classe :extension de la notion du type struct du langage C. Une classe dcrit les donnes et les
fonctions(mthodes) dun objet. Les constituants dune classe sont appels membres.

Exemple 4.1a : struct une classe particulire


// Utilisation d'une structure en C
#include <iostream.h>
struct point {
int x,y;
void init(int, int, point &);
void affiche( point);
};
void init(int a, int b, point &w)
{
w.x=a; w.y=b;
}
void affiche( point w)
{
cout << w.x << "\t" << w.y << endl;
}
main()
{
point p;
init(1,2,p);
affiche(p);
point p2;
init(3,4,p2);
affiche(p2);
}

C++

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

Exemple 4.1b : Utilisation dune structure en C++


#include <iostream.h>
// Tous les membres sont publiques
struct point {
int x,y;
//public :
void init(int, int);
void affiche();
};
// : : est loprateur de porte qui permet daccder des noms normalement hors de porte
void point::init(int a, int b)
{
x=a; y=b;
}
void point::affiche()
{
cout << x << "\t" << y << endl;
}

Exemple 4.1c : Utilisation dune classe


#include <iostream.h>
// Les membres dune classe peuvent tre prive(private) ou publique(public),
// private est pris par dfaut
class point {
int x,y;
public :
void init(int, int);
void affiche();
};
void point::init(int a, int b)
{
x=a; y=b;
}
void point::affiche()
{
cout << x << "\t" << y << endl;
}
main()
{
point p;
p.init(1,2); // . : permet de rfrencer un membre
p.affiche();
point q;
q.init(3,4);
q.affiche();
}
// p.x est interdit car x est une donne prive , seules les mthodes de la classe point peuvent
//accder aux donnes prives
// Exo. : ajouter la fonction membre void deplace(int, int)

C++

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

4.2 OBJETS
4.2.1 Constructeur et destructeur
4.2.1.1 Constructeur/ destructeur statique
// Exemple 4.2.1.1a : utilisation d'une classe avec un constructeur usuel
// statique avec surdefinition de ce dernier
#include <iostream.h>
class point {
int x,y;
public :
point();
point(int);
point(int , int );
void affiche();};
point::point()
{x=y=0;}
point::point(int a)
{x=y=a;}
point::point(int a, int b)
{x=a; y=b;}
void point::affiche()
{cout << x << "\t" << y << endl;}
main()
{point p;
p.affiche();
point q(1);
q.affiche();
point r(1,2);
r.affiche();
}
/* Resultat d'execution
[root@localhost 4.2const]# ./point
0
0
1
1
1
2*/

// Exemple 4.2.1.1b: utilisation d'une classe avec un constructeur usuel


// statique en utilisant des parametres par defaut
#include <iostream.h>
class point {
int x,y;
static int ctr ; // compteur dobjets
public :
point(int =0, int =0); // dclaration des paramtres par dfaut
void affiche();};
int point :: ctr = 0; // init. A 0 du nb d'objets
{x=a; y=b;}
void point::affiche()
{cout << x << "\t" << y << endl;}
point : : ~point()
{ctr-- ;
cout << Nb objets : << ctr << endl ;}
main()
{
point p;
p.affiche();
point q(1);
q.affiche();

C++

10

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

point r(1,2);
r.affiche();
} // le destructeur est appel automatiquement
/* Resultat d'execution
[root@localhost 4.2const]# ./point
0
0
1
0
1
2
Nb objets : 0
*/

4.2.1.2 Constructeur/ destructeur dynamique


// Exemple 4.2.1.2a :utilisation d'une classe avec un constructeur usuel
// dynamique avec surdefinition de ce dernier + comptage du nbre d'objets - application du
destructeur
#include <iostream.h>
#include <stdlib.h>
#define NMAX 4
class entier {
int nbval;
int *val;
static int ctr; //compteur d'objets, variable statique(globale)
public :
entier();
entier(int);
~entier();
void affiche();
static void compte();}; // fonction statique
int entier :: ctr = 0; // init. A 0 du nb d'objets
entier::entier()
{val = new int [nbval=NMAX];
for(int i=0; i<NMAX; i++)val[i]=abs((char)rand());
ctr+=nbval;}
entier::entier(int n)
{val = new int [nbval=n];
for(int i=0; i<n; i++)val[i]=abs((char)rand());
ctr+=nbval;}

C++

11

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

entier :: ~entier()
{ ctr-=nbval;
cout << "dest :Nb entiers restants = " << ctr << endl;
delete val;}
void entier::affiche()
{for(int i=0; i<nbval; i++)cout << val[i]<< "\t";
cout << endl;}
void entier :: compte()
{ cout << "Nb. de entiers crees : " << ctr << endl;}
main()
{
entier :: compte();
{
entier p(3);
p.affiche();
entier :: compte();
}
entier :: compte();
entier q;
q.affiche();
entier r;
r.affiche();
entier :: compte();
}
/* Resultat
[root@localhost 4.2const]# ./p
Nb. De entiers crees : 0
103 58 105
Nb. De entiers crees : 3
dest :Nb entiers restants = 0
Nb. De entiers crees : 0
115 81 1
74
20
41 51
70
Nb. De entiers crees : 8
dest :Nb entiers restants = 4
dest :Nb entiers restants = 0
*/
// Exemple 4.2.1.2b:utilisation d'une classe avec un constructeur usuel
// dynamique avec surdefinition de ce dernier + comptage du nbre d'objets - application du
destructeur
// Utilisation du constructeur par recopie par defaut
#include <iostream.h>
#include <stdlib.h>
#define NMAX 4
class entier {
int nbval;
int *val;
static int ctr; //compteur d'objets
public :
entier();
entier(int);
~entier();
void affiche();
static void compte();
};

C++

12

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

int entier :: ctr = 0; // init. 0 du nb d'objets


entier::entier()
{
val = new int [nbval=NMAX];
for(int i=0; i<NMAX; i++)val[i]=abs((char)rand());
ctr+=nbval;
}

// Exemple 4.2.1.2c: utilisation d'une classe avec un constructeur usuel


// dynamique avec surdefinition de ce dernier + comptage du nbre d'objets - application du
destructeur
// Utilisation du constructeur par recopie explicite
#include <iostream.h>
#include <stdlib.h>
#define NMAX 4
class entier {
int nbval;
int *val;
static int ctr; //compteur d'objets
public :
entier();
entier(int);
entier(entier &);
~entier();
void affiche();
static void compte();
};
int entier :: ctr = 0; // init. 0 du nb d'objets
entier::entier()
{
val = new int [nbval=NMAX];
for(int i=0; i<NMAX; i++)val[i]=abs((char)rand());
ctr+=nbval;
}
entier::entier(int n)
{
val = new int [nbval=n];
for(int i=0; i<n; i++)val[i]=abs((char)rand());
ctr+=nbval;
}
entier::entier(entier &p)
{
val = new int [nbval=p.nbval];
for(int i=0; i<nbval; i++)val[i]=p.val[i];
ctr+=nbval;
}
entier :: ~entier()
{
ctr-=nbval;
cout << "dest :Nb entiers restants = " << ctr << endl;
delete val;
}
void entier::affiche()

C++

13

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

{
for(int i=0; i<nbval; i++)cout << val[i]<< "\t";
cout << endl;
}
void entier :: compte()
{
cout << "Nb. de entiers crees : " << ctr << endl;
}
main()
{
entier :: compte();
entier p(3);
p.affiche();
entier :: compte();
entier q(p);
q.affiche();
entier r;
r.affiche();
entier :: compte();
}
/* Resultat
[ens-linux]# ./p
Nb. De entiers crees : 0
103 58 105
Nb. De entiers crees : 3
103 58 105
115 81 1
74
Nb. De entiers crees : 10
dest :Nb entiers restants = 6
dest :Nb entiers restants = 3
dest :Nb entiers restants = 0
*/

4.2.1.3. Constructeur par recopie


Le constructeur par recopie permet de crer un nouveau objet et dinitialiser son contenu avec celui dun
objet existant et pass en paramtre au constructeur.
Il existe un constructeur par recopie par dfaut. Nanmoins, il est indispensable den prvoir dans le cas de
gestion dynamique de la mmoire.
Exemple 4.2.1.3:

C++

14

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

4.2.2 Catgories dobjets


4.2.2.1 Objet automatique/statique
Les rgles de porte des variables automatiques/statiques sappliquent aux objets de mmes noms. Pour tout
objet, son constructeur est appel lors la dfinition de lobjet. Le destructeur est appel pour un objet
automatique la fin du bloc o il est dfini, et la fin du programme pour un objet statique.
4.2.2.2 objet temporaire
Ce sont des objets, qui ne sont pas dfinis dans le programme, mais que le compilateur cre pour pouvoir
compiler certaines syntaxes se rfrant aux objets. Ce sont donc des objets tranparents pour le programmeur,
le constructeur est alors appel explicitement.
Exemple 4.2.2.2:

4.2.2.3 Objet dynamique


Ce sont des objets dont les constructeur et destructeur font appel aux oprateurs de gestion dynamiques de la
mmoire (cf. 3.5). La gestion de la mmoire dynamiquement permet doptimiser lutilisation de celle-ci et
dtre matre des instants dallocation et de libration de la mmoire.
Exemple 4.2.2.3:

4.2.2.4 Tableau dobjets


Les objets dune classe peuvent tre regroups sous forme de tableau. Dans ce cas le constructeur dobjet
sera appel successivement pour tous les objets du tableau du 1er au dernier. Le destructeur dun tableau
dobjets les limine du dernier cre au premier.
Exemple 4.2.2.4 :

5. FONCTION MEMBRE
syntaxe :
type_retour classe_appartenance : : nom_fonction ( param1, param2, )
{
<instructions>
}
5.1 arguments par dfaut
La dclaration dune fonction peut contenir pour un ou plusieurs paramtres (obligatoirement les derniers de
la liste) des valeurs par dfaut. Ce mcanisme permet dappeler la fonction avec un nombre variable de
paramtres, donc de la surdfinir.
Exemple 5.1:

C++

15

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

5.2 Fonction membre inline


La fonction est transforme en macro. Il existe 2 faons de faire :
Exemple 5.2a :
Class point
{

public :
inline point (int =0 , int =0) ; // le paramtre est nul sil est absent
};
inline point : : point (int abs=0, int ord=0){x=abs ; y=ord ;}
Exemple 5.2b :
Class point
{

public :
point (int abs=0 , int ord=0){x=abs ; y=ord ;}
};

5.3 surdfinition
a surdfinition dune fonction
La sur dfinition dune fonction est la re dclaration de celle-ci avec des paramtres de nombre et de type
diffrents. Cette surcharge permet un paramtrage qui permet dobtenir une hirarchie de fonctions de mme
nom.
Exemple 5.3a:

b- surdfinition dun oprateur


La sur dfinition dun oprateur est la dfinition dans la classe dune fonction membre operator@()
Exemple 5.3b1 : sur dfinition de loprateur daffectation =

Exemple 5.3b2 : sur dfinition doprateurs de sortie << du flot cout.

Exemple 5.3b3 : sur dfinition doprateurs dentre >> du flot cin :

Exemple 5.3b4 : sur dfinition dun oprateur arithmtique :

C++

16

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

5.4. Passage et retour de paramtres


5.4.1 Objet transmis en argument dune fonction membre
Une fonction membre peut avoir comme argument un objet de la mme classe laquelle elle appartient.
Par dfaut une fonction membre reoit ladresse de lobjet layant appel dont elle a accs directement aux
donnes prives. Laccs aux donnes privs dun objet, de la mme classe, pass en argument est obtenu en
passant par lobjet.
En revanche, la fonction membre na accs quaux membres publiques de lobjet pass en paramtre sil
appartient une classe diffrente de celle de la fonction membre.
Exemple 5.4.1 : fonction membre avec un objet de mme classe en argument

5.4.2 Mode de transmission des objets


Il existe 3 modes de passage de dobjets en paramtre vers et partir dune fonction :
- par valeur : une copie de lobjet est pass en paramtre.
- Par adresse : ladresse de lobjet est pass en paramtre.
- Par rfrence : la fonction appele accde directement lobjet rfrenc.
Exemple 5.4.2 :

5.4.3 Auto rfrence un objet


Un objet peut sauto rfrencer en utilisant this qui reprsente ladresse de lobjet layant invoqu.
Exemple 5.4.3:

5.4.4 qualificatif const


Permet de rendre accessible en lecture seule une variable. const est notamment utilis lors du passage de
paramtres par rfrence .
Exemple :

C++

17

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

5.4.5 fonction membre static


Cest une fonction dont la dclaration est prcde par static et est appele directement sans passer par un
objet de la classe laquelle elle appartient. Dans ce cas, cette fonction agit sur des donnes static .
Exemple 5.4.5:

5.4.6. Pointeur sur une fonction membre


Lappel dune fonction membre peut se faire en passant par un pointeur contenant ladresse de cette fonction.
Ce mcanisme est utile pour paramtrer les appels de plusieurs fonctions en passant par le mme pointeur.
Exemple 5.4.6:

6. FONCTION AMIE
Cest une fonction indpendante ou appartenant une classe B et qui peut accder aux donnes prives dune
classe A parce que dans cette elle a t dclare comme amie.
Il existe plusieurs situations damiti :
6.1 Fonction indpendante f amie dune classe A
class A
{

friend f(A)

};
f(A a){} ; //dfinition de f , dans lobjet a de classe A est utilis

C++

18

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

6.2 Fonction indpendante f amie de plusieurs classes (A et B)


class A ; // utile pour compiler class B
class B
{

friend f(A,B)

};
class A
{

friend f(A,B) ;

};
6.3 Fonction membre f dune classe B, amie dune classe A
class A ; // utile pour compiler class B
class B
{

f(A)

};
class A
{

friend B :f(A) ;

};

6.4 Fonctions dune classe B amies dune classe A


class A ;
class B
{

f1(A) ;
f2(A) ;

};
class A
{

friend class B ; //Toutes les fns membre de B sont amies de A

};

C++

19

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

7. HERITAGE SIMPLE
7.1 Definition
Lhritage est laccs de tout ou partie des membres dune classe de base par une classe drive.
Syntaxe :
Class Base
{

};
class Derivee : type_heritage Base
{

};
7.2 Qualificatifs des membres dune classe
public : accessible aux fonctions membre de la classe, aux fonctions amies et lobjet utilisant les membres
de la classe .
private : accessible aux fonctions membres de la classe et aux fonctions amies. Inaccessible aux fonctions
membres dune classe drive.
Protected : accessible aux fonctions membres de la classe, aux fonctions amies et aux fonctions membres
dune classe drive.
7.3 Relations entre le type dhritage et les qualificatifs des membres dune classe
Classe
Base
Derivee
Accs aux
Type_hritage
fonctions membres
et amies
Non
Private
Private
Public
Oui
Protected
Protected
Oui
Public
Public
Private
Private
Non
Protected
Protected
Protected
Oui
Public
Protected
Oui
Non
Private
Private
Private
Oui
Private
Protected
Oui
Private
Public

C++

20

Accs un objet
utilisant la classe
Non
Non
Oui
Non
Non
Non
Non
Non
Non

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

7.4 Hritage des fonctions amies


Une fonction amie dune classe drive accde aux membres protgs (protected) de la classe de base. (un
ami peut partager un hritage !)
Une fonction amie dune classe de base ne peut tre hrite par une classe drive. (lamiti ne shrite pas !)
7.5 Hritage des constructeurs
a constructeur usuel
Syntaxe :
B : :B(int x, int y, int z) : A(x,y) ; // la classe B hrite le constructeur usuel de la classe A
b constructeur par recopie
Syntaxe :
B : :B(B &b) : A(b) ; // la classe B hrite le constructeur par recopie de la classe A

8. HERITAGE MULTIPLE
8.1 Dfinition
Une classe peut hriter simultanment de plusieurs autres classes. Lhritage de chacune de ces classes peut
tre public/protected/private. Les mmes rgles de lhritage simple sy appliquent.
Syntaxe :
Class D : private C, protected B, public A ;
{

};
Sil ya redfinition dun membre des classes A, B ou C dans D, laccs se fait par dfaut au membre de D. Si
le membre vis est celui des classes A,B ou C, il y accder en utilisant loprateur de porte : :
8.2 Hritage multiple des constructeurs
Syntaxe :
D(int a, int b, int c, int d) : C(c), B(b), A(a) ;
Lappel des constructeurs de C, B et A se fait dans lordre mentionn . Les destructeurs sont appels dans
lordre inverse.

C++

21

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

8.3 Exemple dheritage multiple publique/protege


// Heritage multiple publique/protege : la classe disque herite de cercle qui herite de point.
#include <iostream.h>
class point {
protected :
int x,y;
public :
point(int =0, int =0);
void affiche();
};
point::point(int a, int b)
{
x=a; y=b;
}
void point::affiche()
{
cout << "point : " << x << "\t" << y << endl;
}
class cercle : public point
{
protected :
int r; //rayon
public :
cercle(int, int, int);
void affiche();
};
cercle :: cercle(int a, int b, int c) : point(a,b)
{r=c;}
void cercle :: affiche()
{cout << "cercle ce centre : " << x << "\t" << y << "\t" << "et de rayon : " << r << endl;}
class disque : public cercle
{
double s; //surface
public :
disque(int, int, int);
void affiche();
};
disque :: disque(int a, int b, int c) : cercle(a,b,c)
{
s=3.14*r*r;
}
void disque :: affiche()
{
cout << "disque de centre : " << x << "\t" << y << "\t" << "et de rayon : " << r << "\t et de surface : " << s
<<endl;
}
main()
{ point p; // centre de coord. (0,0)
p.affiche();
cercle c(0,0,1); // rayon
c.affiche();
disque d(0,0,1);
d.affiche();
}
/* Resultat d'execution
point : 0
0
cercle ce centre : 0 0
et de rayon : 1
disque de centre : 0 0
et de rayon : 1 et de surface : 3.14
*/

C++

22

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

8.4 Exemple dhritage multiple prive


// Heritage multiple prive : la classe disque herite de cercle qui herite de point.La classe disque ne
peut pas heriter les donnees de la classe point car celles-ci deviennent privees.
#include <iostream.h>
class point {
protected :
int x,y;
public :
point(int =0, int =0);
void affiche();
};
point::point(int a, int b)
{
x=a; y=b;
}
void point::affiche()
{
cout << "point : " << x << "\t" << y << endl;
}
class cercle : private point
{
protected :
int r; //rayon
public :
cercle(int, int, int);
void affiche();
};
cercle :: cercle(int a, int b, int c) : point(a,b)
{
r=c;
}
void cercle :: affiche()
{
cout << "cercle ce centre : " << x << "\t" << y << "\t" << "et de rayon : " << r << endl;
}
class disque : private cercle
{
double s; //surface
public :
disque(int, int, int);
void affiche();
};
disque :: disque(int a, int b, int c) : cercle(a,b,c)
{
s=3.14*r*r;
}
void disque :: affiche()
{
cout << "disque de centre : " << x << "\t" << y << "\t" << "et de rayon : " << r << "\t et de surface : " << s
<<endl;
}
main()
{
point p; // centre de coord. (0,0)
p.affiche();
cercle c(0,0,1); // rayon
c.affiche();
disque d(0,0,1);

C++

23

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

d.affiche();
}
/* Resultat de la compilation
$ g++ p.cpp -o p
p.cpp: In method `void disque::affiche()':
p.cpp:56: member `x' is from private base class
p.cpp:56: member `y' is from private base class */

8.5 Exemple 1 dhritage multiple de +sieurs familles


// Heritage multiple protg : la classe disque herite de cercle qui herite de point.La classe disque
hrite galement de materiau . Le constructeur par dfaut de cette classe est appel implicitement.
#include <iostream.h>
class point {
protected :
int x,y;
public :
point(int =0, int =0);
void affiche();
};
point::point(int a, int b)
{
x=a; y=b;
}
void point::affiche()
{
cout << "point : " << x << "\t" << y << endl;
}
class cercle : protected point
{
protected :
int r; //rayon
public :
cercle(int, int, int);
void affiche();
};
cercle :: cercle(int a, int b, int c) : point (a,b)
{
r=c;
}
void cercle :: affiche()
{
cout << "cercle ce centre : " << x << "\t" << y << "\t" << "et de rayon : " << r << endl;
}
class materiau
{
protected :
int m; //materiau
public :
materiau(int=12);
void affiche();
};
materiau :: materiau(int a)
{
m=a;
}
void materiau :: affiche()
{
cout << "materiau : " << m << endl;
}

C++

24

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

class disque : protected cercle, protected materiau


{
double s; //surface
public :
disque(int, int, int);
void affiche();
};
disque::disque(int a,int b,int c):cercle(a,b,c)
{
s=3.14*r*r;
}
void disque :: affiche()
{
cout << "disque de centre : " << x << "\t" << y << "\t" << "et de rayon : " << r << "\t et de surface : " << s
<< "\et de materiau : " << m <<endl;
}
main()
{
materiau m(45);
m.affiche();
point p; // centre de coord. (0,0)
p.affiche();
cercle c(0,0,2); // rayon
c.affiche();
disque d(0,0,2);
d.affiche();
}
/* Resultat de la compilation
[root@localhost 4.7hermul]# ./p
materiau : 45
point : 0
0
cercle ce centre : 0 0
et de rayon : 2
disque de centre : 0 0
et de rayon : 2 et de surface : 12.56 de materiau : 12
*/
__________________________________________________________
8.6 Exemple 2 dhritage multiple de plusieurs familles
// Heritage multiple public/protegee : la classe disque herite de cercle qui herite de point.La classe
disque herite egalement de la classe 'materiau', le constructeur de cette classe est appele explicitement
#include <iostream.h>
class point {
protected :
int x,y;
public :
point(int =0, int =0);
void affiche();
};
point::point(int a, int b)
{
x=a; y=b;
}
void point::affiche()
{
cout << "point : " << x << "\t" << y << endl;
}
class cercle : protected point
{
protected :
int r; //rayon
public :
cercle(int, int, int);

C++

25

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

void affiche();
};
cercle :: cercle(int a, int b, int c) : point (a,b)
{
r=c;
}
void cercle :: affiche()
{
cout << "cercle ce centre : " << x << "\t" << y << "\t" << "et de rayon : " << r << endl;
}
class materiau
{
protected :
int m; //materiau
public :
materiau(int=12);
void affiche();
};
materiau :: materiau(int a)
{
m=a;
}
void materiau :: affiche()
{
cout << "materiau : " << m << endl;
}
class disque : public cercle, public materiau
{
double s; //surface
public :
disque(int, int, int,int);
void affiche();
};
disque::disque(int a,int b,int c,int d):cercle(a,b,c),materiau(d)
{
s=3.14*r*r;
}
void disque :: affiche()
{
cout << "disque de centre : " << x << "\t" << y << "\t" << "et de rayon : " << r << "\t et de surface : " << s
<< "\et de materiau : " << m <<endl;
}
main()
{
materiau m(45);
m.affiche();
point p; // centre de coord. (0,0)
p.affiche();
cercle c(0,0,2); // rayon
c.affiche();
disque d(0,0,2,33);
d.affiche();
}
/* Resultat d'execution
[root@localhost 4.7hermul]# ./p
materiau : 45
point : 0
0
cercle ce centre : 0 0
et de rayon : 2
disque de centre : 0 0
et de rayon : 2 et de surface : 12.56 de materiau : 33

C++

26

*/

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

9. CONTENU DES TDs


TD 1 : SPECIFICITES NON OBJET DU C++
TD 2 : CLASSE ET OBJET
TD 3 : CONSTRUCTEUR/DESTRUCTEUR
TD 4 : HERITAGE

Universit dEvry
UFR Sces et Technologie
IUP-Licence
TD1 C++

Spcificits non objet du C++ et Introduction la notion de classe

Exercice 1 : Ecrire un programme qui fait appel deux fonctions permettant de calculer et renvoyer le carr
dun nombre saisi dans le programme principal. La premire fonction utilisera un appel par valeur, la deuxime,
un appel par rfrence . Quelle est la diffrence.

Exercice 2 : Ecrire un programme qui fait appel une fonction qui permet de calculer le volume dune boite.
Ses trois arguments, savoir : longueur, largeur et hauteur ont une valeur par dfaut gale 1.
Vous calculerez le volume des trois boites suivantes :
Long=5, larg=1, haut=1
Long=5, larg=3, haut =1 Long=1, larg=5, haut=2

Exercice 3 : Ecrire un programme qui fait appel une fonction qui retourne le quotient de deux nombres qui
peuvent tre entiers ou rels. Le rsultat est rel.

Exercice 4 : Ecrire un programme qui permet dallouer dynamiquement de la mmoire suffisante pour saisir n
lments de type entier et de saisir ces lments; n tant donn par lutilisateur.

Exercice 5 : Raliser une structure Point permettant de manipuler un point dun plan. Ecrire :
- Une fonction "saisie()" recevant en entre, les coordonnes dun point
- une fonction translat() effectuant une translation dfinie par ses deux arguments float.
- Deux fonctions membres nommes abscisse() et ordonnee() retournant respectivement labscisse et
lordonne dun point.

C++

27

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

Universit dEvry
UFR Sces et Technologie
IUP-Licence
TD2 C++
Classes, Constructeur/Destructeur

Exercice 1 : Convertir la structure Point de l'exercice 5 du TD 1 en classe en lui ajoutant les fonctions membres
suivantes :
- homothetie() effectuant un dplacement dun point suivant un coefficient multiplicateur fourni en argument ;
- rotation() qui effectue une rotation dont langle est fourni en argument ;
- rho() et theta() qui retournent les coordonnes polaires dun point.

Exercice 2 : Ecrire un petit programme avec une fonction main() permettant de manipuler un point :
Saisir les deux coordonnes du point, lui appliquer une translation (dx, dy), une homothtie de coefficient k, puis
une rotation dangle alpha. Afficher aprs chaque transformation ponctuelle les coordonnes cartsiennes et
polaires du point.

Exercice 3 : Modifier la classe prcdente pour que les donnes prives ne soient plus labscisse et lordonne
mais les coordonnes polaires.
Vous aurez besoin de la fonction angle() qui calcule langle correspondant aux coordonnes polaires

C++

28

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

Universit dEvry
UFR Sces et Technologie
IUP-Licence
TD3 C++

Classes, Constructeur/Destructeur, Hritage

Exercice 1 :
Ajouter la classe Point, de lexercice 5 TD1, une fonction affiche() permettant dafficher les coordonnes dun
point ainsi que le nombre de points dj crs.
Exercice 2 :
Reprendre la classe Point et transformer la fonction affiche() en fonction amie. Faites les modifications que cela
induit dans le programme.

Exercice 3 :
Ecrire une classe Rectangle hritant de la classe Point.
Vous devrez :
- Ajouter trois caractristiques pour la longueur, la largeur et langle de sa base par rapport laxe des x.
- Ecrire le constructeur dun rectangle
Ecrire trois fonctions longueur(), largeur() et angle() permettant de connatre la longueur, la largeur et
linclinaison du rectangle.
- Rajouter la fonction diagonale() permettant de calculer la longueur de la diagonale du rectangle.
- Redfinissez les fonctions rotation() et homothetie() pour quelles permettent la rotation effective et
lhomothtie dun rectangle.
- Ecrire un programme utilisant des rectangles.

C++

29

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

Universite d'Evry

UFR Sces et Technologie


IUP-Licence

TD4 C++

Classes, Hritage

Exercice 1 :
Raliser une classe Matriau. Ecrire un constructeur permettant dinitialiser le type de matriau ainsi que deux
fonctions membres :
- une fonction choix() qui permet de choisir et renvoyer le type de matriau,
- une fonction affiche() qui permet dafficher le type de matriau choisi.

Exercice 2 :
Raliser une classe Paralllpipde hritant de la classe Rectangle. Ne pas oublier dajouter aux donnes la
hauteur du paralllpipde.

Exercice 3
Ecrire une classe Boite hritant de la classe Paralllpipde et de la classe Matriau. Ecrire un programme qui
permet de crer une boite.

C++

30

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

10. CONTENU DES TPs


Programmation en C++ dune application en plusieurs parties :
TP 1 : Spcificits non objet du C++
TP 2 : Notion de classe en C++
TP 3 : Notion de constructeur et de destructeur d'objet en C++
TP 4 : Notion de fonction amie en C++ et introduction lhritage
TP 5 : Hritage

C++

31

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

Universite d'Evry

UFR Sces et Technologie


IUP-Licence
TP1 C++
Spcificits non objet du C++
1.Objectif :
Le but de ce TP est de vous familiariser avec les bases du C++ par l'criture de programmes pour implmenter des notions de
structure et de passage de paramtres une fonction.
2.Consignes de programmation :
Il s'agit de partir d'un exemple de programme crit en C++ et de le modifier ou de creer de nouveaux programmes.
Les fichiers sources exemples ainsi que des excutables se trouvent dans le rpertoire :
[serveur]$/home/ufrst/mallem/cours/c++/tp1
La recopie dans votre rpertoire de "tp1" sous serveur peut etre obtenue par:
[serveur]$cp -r /home/ufrst/mallem/cours/c++/tp1 .
La compilation, du programme "ensemble.cpp" est obtenue par la commande :
[serveur]$g++ ensemble.cpp -o ensemble
L'execution de "ensemble" est realisee par la commande :
[serveur]$./ensemble
N'oubliez pas, une fois le TP termin de sauvegarder votre travail sur votre compte(et ventuellement sur disquette)
car le rsultat de ce TP est utilis dans les TPs suivants.
(Les commandes de recopie du TP, d'edition et de compilation sous Linux sont indiques en annexe)
3. Sujet :
Q1: commenter le programme "ensemble.cpp" donn comme exemple de base.
Q2: Ecrire une fonction "intersection(ensemble X, ensemble Y, ensemble &Z)" qui place dans Z l'intersection entre X et Y.
Q3: Ecrire une fonction "union(ensemble X, ensemble Y, ensemble &Z)" qui place dans Z l'union de X et Y.
Q4: Ecrire une fonction "difference(ensemble X, ensemble Y, ensemble &Z)" qui place dans Z la diffrence entre X et Y.
Q5: Revoir la fonction "inclusion(ensemble X, ensemble Y)" de manire ce que celle-ci fonctionne pour des ensembles
contenant des lments redondants.
4. Remarques :
1)Vous prendrez soin de definir les prototypes des fonctions en utilisant des references afin de pouvoir modifier les
composantes des structures definissant les ensembles.
2)Vous n'avez pas a realiser une interface avec menu graphique. Vous vous limitez a saisir deux ensembles X, Y et un
element x au clavier (comme c'est le cas du programme donne en exemple), puis a calculer tous les cas de figures enumeres
ci-haut (affiches simplement comme dans l'exemple).
3) Vous pourrez utiliser, dans le programme deux structures d'ensembles pour les ensembles saisis, puis une troisieme pour
stocker le resultat des operations
difference et intersection. Pour l'union, vous pouvez definir une structure contenant un tableau de taille deux fois plus grandes
(l'union des deux ensembles aura au plus une cardinalite deux fois plus grandes que l'un des deux ensembles), ainsi qu'une
composante cardinal de maniere a ce que la fonction d'affichage puisse traiter cet ensemble aussi .
4)l'excution du programme ./ensemble2 donne une idee du rsultat attendu

P.S. : Si vous avez fini le TP avant la fin de la sance, vous pourrez vous attaquer au complment du TP1 se
trouvant dans le fichier sujet1_bis.
Annexe : Commandes de recopie de fichiers, d'edition, de compilation ... sous Linux
1. Connexion sur le serveur Linux
login : nom
password : mot de passe
[serveur ] $ mkdir c++ (si ce n'est pas fait)
[serveur ] $ cd c++
2. Recopie du TP sous "serveur"
[serveur ] $ telnet serveur
[serveur] $ cp -r /home/ufrst/mallem/cours/c++/tpx . (x=1..5)
3. Edition de fichier sous Linux local
[serveur ] $ emacs &
4. Compilation sous Linux local
[serveur ] $ g++ fichier.cpp -o fichier
5. Envoi du fichier par e-mail :
[serveur ] $ mail user@******* <ensemble.cpp
6. Impression :
[serveur ] $ lpr ensemble.cpp
7. Utilisation du lecteur de disquette
Lancer Windows, procder par "ftp", sous windows, pour recuprer ou sauver un fichier

C++

32

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

Universite d'Evry

UFR Sces et Technologie


IUP-Licence
TP2 C++
Notion de classe en C++
1. Objectif :
Le but de ce TP est de vous familiariser avec la notion de classe et d'encapsulation de donnes et de fonctions membres en
C++.
2. Consignes de programmation :
Il s'agit de modifier l'exemple "ensemble2.cpp" du tp1 de faon a ce que la structure ensemble devienne une classe.
Les fichiers sources exemples ainsi que des excutables se trouvent dans le rpertoire :
serveur $ /home/ufrst/mallem/cours/c++/tp2
La recopie dans votre rpertoire de "tp2" sous serveur peut etre obtenue par:
serveur $ cp -r /home/ufrst/mallem/cours/c++/tp1 .
La compilation, du programme "ensemble.cpp" est obtenue par la commande :
$ g++ ensemble.cpp -o ensemble
L'execution de "ensemble" est realisee par la commande :
$ ./ensemble (Les commandes de recopie du TP, d'edition et de compilation sous Linux sont indiques en annexe)
3. Sujet :
La structure "ensemble" :
struct ensemble {
int cardinal;
int elements[NMAX];
};
devient :
class ensemble {
int cardinal;
int elements[NMAX];
public :
int appartient(int);
int inclusion(ensemble);
ensemble reunion(ensemble);
ensemble intersection(ensemble);
ensemble difference(ensemble);
void saisie();
void affichage();
int menu(void);
int Cardinal(); // retourne le cardinal de ensemble
};

Q1: Modifier le programme ensemble.cpp, resultat du TP1, en un programme ensemble2.cpp de faon a ce que
"ensemble" devienne une classe comme indiqu ci-dessus.
Q2 : Remplacer la fonction "void saisie(ensemble&)" par un constructeur usuel "ensemble :: ensemble()",qui fait exactement
le meme travail que saisie(), et apporter les egalement les modifications necessaires dans le programme principal.
Que remarquez vous lors de l'execution du programme dans ce cas ?
l'excution du programme ./ensemble2 donne une idee du rsultat attendu
___________

Annexe : Commandes de recopie de fichiers, d'edition, de compilation ... sous Linux


1. Connexion sur le serveur Linux
login : nom
password : mot de passe
[serveur ] $ mkdir c++ (si ce n'est pas fait)
[serveur ] $ cd c++
2. Recopie du TP sous "serveur"
[serveur ] $ telnet serveur
[serveur] $ cp -r /home/ufrst/mallem/cours/c++/tpx . (x=1..5)
3. Edition de fichier sous Linux local
[serveur ] $ emacs &
4. Compilation sous Linux local
[serveur ] $ g++ fichier.cpp -o fichier
5. Envoi du fichier par e-mail :
[serveur ] $ mail user@******* <ensemble.cpp
6. Impression :
[serveur ] $ lpr ensemble.cpp
7. Utilisation du lecteur de disquette
Lancer Windows, procder par "ftp", sous windows, pour recuprer ou sauver un fichier

C++

33

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

Universite d'Evry

UFR Sces et Technologie


IUP-Licence
TP3 C++
Notion de constructeur et de destructeur d'objet en C++
1. Objectif :
Le but de ce TP est de vous familiariser avec la notion de constructeur et de destructeur d'objet en C++.
2. Consignes de programmation :
Il s'agit de modifier l'exemple "ensemble2.cpp" resultat du tp2 de faon a ce que la classe ensemble contienne des
constructeurs et un destructeur d'objets.
Les fichiers sources exemples ainsi que des excutables se trouvent dans le rpertoire :
serveur $ /home/ufrst/mallem/cours/c++/tp3
(Les commandes de recopie du TP, d'edition et de compilation sous Linux sont indiques en annexe)
3. Sujet :
La classe ensemble devient :
//fichier ensemble.h - declaration de la classe ensemble
#include <iostream.h>
#include <stdlib.h>
#define XMAX 10 //Taille max de ensemble X
#define YMAX 10 //Taille max de ensemble Y
#define ZMAX 20 //Taille max de ensemble Z
class ensemble {
int cardinal;
int *elements; //pointeur sur les elements de ensemble
public :
ensemble(int); //tp3 - constructeur dynamique usuel
ensemble(const ensemble&); // TP3 - Constructeur dynamique de recopie
~ensemble(); //tp3- destructeur dynamique
int appartient(int);
int inclusion(ensemble);
ensemble reunion(ensemble);
ensemble intersection(ensemble);
ensemble difference(ensemble);
//interface.h - declaration des prototypes des fonctions d'entree sortie
void affichage();
int menu(void);
int Cardinal(); // retourne le cardinal de ensemble };
Q1 : Ecrire le programme correspondant au constructeur usuel dynamique ensemble(int). Utiliser la fonction
"abs((char)rand()/10);" pour initialiser chaque element de l'ensemble cree.
Q2 : Ecrire le programme correspondant au constructeur de recopie dynamique ensemble(const ensemble&).
Ecrire le programme correspondant au destructeur ~ensemble(). Apporter les modifications necessaires dans le
programme principal. L'excution du programme ./ensemble3_1 donne une idee du rsultat attendu lors de l'utilisation d'un
constructeur pour une allocation memoire statique.
l'excution du programme ./ensemble3_2 donne une idee du rsultat attendu lors de l'utilisation d'un constructeur
dynamique___________

Annexe : Commandes de recopie de fichiers, d'edition, de compilation ... sous Linux


1. Connexion sur le serveur Linux
login : nom
password : mot de passe
[serveur ] $ mkdir c++ (si ce n'est pas fait)
[serveur ] $ cd c++
2. Recopie du TP sous "serveur"
[serveur ] $ telnet serveur
[serveur] $ cp -r /home/ufrst/mallem/cours/c++/tpx . (x=1..5)
3. Edition de fichier sous Linux local
[serveur ] $ emacs &
4. Compilation sous Linux local
[serveur ] $ g++ fichier.cpp -o fichier
5. Envoi du fichier par e-mail :
[serveur ] $ mail user@******* <ensemble.cpp
6. Impression :
[serveur ] $ lpr ensemble.cpp
7. Utilisation du lecteur de disquette

Lancer Windows, procder par "ftp", sous windows, pour recuprer ou sauver un fichier

C++

34

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

Universite d'Evry

UFR Sces et Technologie


IUP-Licence
TP4 C++

Notion de fonction amie en C++

1. Objectif :

Le but de ce TP est de vous familiariser avec la notion de fonction amie permettant de manipuler des objets d'une
classe dont elle n'est pas membre.
2. Consignes de programmation :
Il s'agit de modifier votre programme resultat du TP3 de faon a ce que la classe ensemble contienne
deux fonctions amies de la classe ensemble.
Les fichiers sources exemples ainsi que des excutables se trouvent dans le rpertoire :
serveur $ /home/ufrst/mallem/cours/c++/tp4
(Les commandes de recopie du TP, d'edition et de compilation sous Linux sont indiques en annexe)
3. Sujet :
Q1 : Ecrire une fonction amie de la classe ensemble appelee "void parite(ensemble)" qui permet de donner la
parite (0:pair / 1: impair) de chaque element de l'ensemble passe en parametre a la fonction parite. Cette fonction
doit afficher la parite de tous les elements d'un ensemble resultat d'une operation.
Q2 : Ecrire une fonction amie de la classe ensemble appelee "void premier(ensemble)" qui permet d'afficher
pour chaque element de l'ensemble resultat d'une operation, passe en parametre a la fonction premier, s'il s'agit
d'un nombre premier (0: non premier/ 1: premier).
l'excution du programme ./ensemble4 donne une idee du rsultat attendu
___________

Annexe : Commandes de recopie de fichiers, d'edition, de compilation ... sous Linux


1. Connexion sur le serveur Linux
login : nom
password : mot de passe
[serveur ] $ mkdir c++ (si ce n'est pas fait)
[serveur ] $ cd c++
2. Recopie du TP sous "serveur"
[serveur ] $ telnet serveur
[serveur] $ cp -r /home/ufrst/mallem/cours/c++/tpx . (x=1..5)
3. Edition de fichier sous Linux local
[serveur ] $ emacs &
4. Compilation sous Linux local
[serveur ] $ g++ fichier.cpp -o fichier
5. Envoi du fichier par e-mail :
[serveur ] $ mail user@******* <ensemble.cpp
6. Impression :
[serveur ] $ lpr ensemble.cpp
7. Utilisation du lecteur de disquette
Lancer Windows, procder par "ftp", sous windows, pour recuprer ou sauver un fichier

C++

35

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

Universite d'Evry
UFR Sces et Technologie
IUP-Licence

TP5 C++

Notion d'heritage simple en C++

1. Objectif :
Le but de ce TP est de vous familiariser avec la notion d'heritage simple en C++.
2. Consignes de programmation :
Il s'agit de modifier votre programme resultat du TP4 de faon a ce que la classe ensemble contienne
deux fonctions amies de la classe ensemble.
Les fichiers sources exemples ainsi que des excutables se trouvent dans le rpertoire :
serveur $ /home/ufrst/mallem/cours/c++/tp5
(Les commandes de recopie du TP, d'edition et de compilation sous Linux sont indiques en annexe)
3. Sujet :
Il s'agit de rajouter la classe :
// classe ensembleplus herite de la classe ensemble
class ensembleplus : public ensemble
{
public :
int *parite;
int *premier;
ensembleplus(int); //constructeur
ensembleplus(const ensemble&); //constructeur par recopie
void affichageplus(); // affichage de l'ensemble et de ses proprites parite et premier
friend void Parite(ensemble&); //fonction amie independante
friend void Premier(ensemble&); //fonction amie independante
};
Q1 : Ecrire les fonctions membres de cette nouvelle classe.
Q2 : Modifier la fonction "void parite(ensemble)" qui devient amie de la classe ensembleplus et ayant pour
protoype "void Parite(ensembleplus&)";.
Q3 : Modifier la fonction "void premier(ensemble)" qui devient amie de la classe ensembleplus et ayant pour
protoype "void Premier(ensembleplus&)";.
L'excution du programme ./ensemble5 donne une idee du rsultat attendu
________________________
Annexe : Commandes de recopie de fichiers, d'edition, de compilation ... sous Linux
1. Connexion sur le serveur Linux
login : nom
password : mot de passe
[serveur ] $ mkdir c++ (si ce n'est pas fait)
[serveur ] $ cd c++
2. Recopie du TP sous "serveur"
[serveur ] $ telnet serveur
[serveur] $ cp -r /home/ufrst/mallem/cours/c++/tpx . (x=1..5)
3. Edition de fichier sous Linux local
[serveur ] $ emacs &
4. Compilation sous Linux local
[serveur ] $ g++ fichier.cpp -o fichier
5. Envoi du fichier par e-mail :
[serveur ] $ mail user@******* <ensemble.cpp
6. Impression :
[serveur ] $ lpr ensemble.cpp
7. Utilisation du lecteur de disquette
Lancer Windows, procder par "ftp", sous windows, pour recuprer ou sauver un fichier

C++

36

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

12. CARACTERISTIQUES DE JAVA


Tout est classe (pas de fonctions) sauf les types primitifs
(int, float, double, ...) et les tableaux
Toutes les classes drivent de java.lang.Object
Hritage simple pour les classes
Hritage multiple pour les interfaces
Les objets se manipulent via des rfrences
Une API objet standard est fournie
La syntaxe est proche de celle de C
Le compilateur Java gnre du byte code.
La Java Virtual Machine (JVM) est prsente sur Unix,
Win32, Mac, OS/2, Netscape, IE, ...
Le langage a une smantique trs prcise.
La taille des types primitifs est indpendante de la plateforme.
Java supporte un code source crit en Unicode.
Java est accompagn d'une librairie standard.

C++

37

http://lsc.cemif.univ-evry.fr:8080/~mallem

Universit d'Evry-Val d'Essonne

UFR Sciences & Technologies/Dpt GI

13. LES DIFFERENCES JAVA - C++


Pas de prprocesseur (#define, Pas d'hritage multiple(sauf
#include)
pour les interfaces)
Pas de struct, union, enum et Pas de template(patron de
typedef
classe)
Pas de variables globales, ni
de fonction

Pas de surcharge
d'oprateurs

Pas de fonction nombre


variable d'arguments

Pas de passage d'argument


par recopie

Pas de pointeurs (en


particulier de fonction) mais
des rfrences

Pas d'allocation mmoire


statique pour les objets (et
tableaux)

Sites Web :
http://www.javasoft.com : Site officiel Java (JDK et doc.)
http://www.javaworld.com : Info sur Java
http//www.gamelan.com : applications, applets, packages, ...
http://www.jars.com : idem
http://www.blackdown.com : Java pour linux

C++

38

http://lsc.cemif.univ-evry.fr:8080/~mallem

Vous aimerez peut-être aussi