SlideShare una empresa de Scribd logo
1 de 6
Descargar para leer sin conexión
[TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++
INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 1
Prof : Mariem ZAOUALI – Niveau : GL2
1. Objectif de la séance
Le but de la séance est de manipuler les notions suivantes :
 Fonctions amies
 Surcharge des opérateurs
 Sauvegarde dans un fichier et récupération des données
NB : Durant ce TP, créez les fichiers headers et leurs implémentations, le main fera l’objet d’un fichier .cpp à
part
2. Fonctions amies
On va reprendre l’exemple du cours. On veut développer une fonction intitulée
vecteur produit (const matrice &, const vecteur &)
avec :
 Vecteur est le type de retour de la fonction produit
 Vecteur et matrice sont deux classes à définir
o Vecteur
 Attribut : un tableau double de taille 3
 Méthodes : Un constructeur et une méthode membre d’affichage du vecteur
o Matrice
 Attribut : un tableau de deux dimensions 3x3 de type double
 Méthodes : un constructeur
Question 1 : A votre avis, pourquoi choisit-on le passage de paramètres constants par référence ?
Le passage de paramètres constants nous permet d’être à l’abri de toute tentative de modification de valeur
du paramètre en question. Le passer par référence veut dire qu’on veut éviter de le copier.
En combinant les deux modes ensemble, et c’est bel et bien le cas du constructeur par recopie, l’objet passé
en paramètre ne peut être ni modifié, ni avoir une copie … utile pour un accès en « lecture seule ».
Question 2 : Où peut-on définir cette fonction, dans la classe vecteur ou matrice ? Justifier votre réponse.
Cette fonction doit être définie/déclarée dans une autre classe à part matrice et vecteur.
Ceci est grâce au fait que la signature de la fonction comprend les deux types matrice et vecteur comme
paramètre.
Question 3 : Écrivez un petit programme de test. On fournira séparément les deux déclarations de chacune
des classes, la définition du produit et le programme de test.
//vecteur.h
class matrice; //pour pouvoir compiler la déclaration du vecteur
class vecteur
{
[TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++
INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 2
private:
double tab[3];
public :
vecteur();
vecteur(double,double,double);
void affichage();
friend vecteur produit(const matrice&,const vecteur &);
};
//matrice.h
class vecteur;
class matrice
{
private :
double mat[3][3];
public:
matrice();
matrice(double t[3][3]);
friend vecteur produit(const matrice&,const vecteur&);
};
//vecteur.cpp
#include "vecteur.h"
#include "matrice.h"
#include <iostream>
using namespace std;
vecteur::vecteur()
{
for(int i=0; i<3; i++)
tab[i]=0;
}
vecteur::vecteur(double a,double b,double c)
{
tab[0]=a; tab[1]=b; tab[2]=c;
}
void vecteur::affichage()
{
for (int i=0; i<3; i++)
cout<<tab[i]<<" ";
}
[TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++
INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 3
//matrice.cpp
#include "matrice.h"
#include "vecteur.h"
#include <iostream>
using namespace std;
matrice::matrice()
{
for (int i=0; i<3; i++)
for (int j=0; j<3; j++)
mat[i][j]=0;
}
matrice::matrice (double t [3] [3])
{
int i ; int j ;
for (i=0 ; i<3 ; i++)
for (j=0 ; j<3 ; j++)
mat[i] [j] = t[i] [j] ;
}
//main.cpp
//Définition de la fonction produit
#include "vecteur.h"
#include "matrice.h"
#include <iostream>
using namespace std;
vecteur produit(const matrice &m,const vecteur &x)
{
vecteur v;
for (int i=0; i<3; i++)
for (int j=0; j<3; j++)
v.tab[i] += m.mat[i] [j] * x.tab[j] ;
return v;
}
Int main()
{
vecteur w (1,2,3), res ;
double tab [3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 } ;
matrice a;
//Remplir la matrice a par les valeurs du tab
res = produit(a, w) ;
res.affiche () ;
[TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++
INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 4
return 0 ;
}
3. Surcharge des opérateurs
On va rajouter d’autres méthodes à la classe vecteur. Définissez les opérateurs == et != de manière qu’ils
permettent de tester si deux vecteurs ont les même valeurs ou pas.
a. en utilisant des fonctions membres
// on rajoute ces lignes au niveau de la classe vecteur.h
int operator ==(vecteur);
int operator !=(vecteur);
//définir au niveau de la classe vecteur.cpp
int vecteur::operator == (vecteur v)
{ for (int i=0; i<3; i++)
if(v.tab[i]!=this->tab[i])
return 0;
return 1;
}
int vecteur::operator != (vecteur v)
{
for (int i=0; i<3; i++)
if(v.tab[i]!=this->tab[i])
return 1;
return 0;
}
b. en utilisant des fonctions amies.
// on rajoute ces lignes au niveau de la classe vecteur.h
friend int operator ==(vecteur,vecteur);
friend int operator !=(vecteur,vecteur);
//définir au niveau de la classe main.cpp
Int operator == (vecteur v, vecteur w)
{ for (int i=0; i<3; i++)
if(v.tab[i]!=w.tab[i])
return 0;
return 1;
}
int operator != (vecteur v, vecteur w)
{
for (int i=0; i<3; i++)
if(v.tab[i]!=w.tab[i])
[TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++
INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 5
return 1;
return 0;
}
4. Sauvegarde dans un fichier et récupération des données
Nous allons manipuler dans ce dernier exercice, la lecture et l’écriture des données d’un fichier avec C++. Il
s’agit d’améliorer l’exercice de Homework fait en TP3. On veut rajouter la possibilité que l’utilisateur peut
enregistrer le contenu de la map dans un fichier, ou remplir la map à partir d’un fichier.
 Q1 : Rajoutez une méthode où vous stockez les données de la map dans un fichier.
//On suppose que la classe est appelée event
void event::insert_file(string file_name)
//Dans event.h , l’entête de la méthode sera la suivante
void event::insert_file(string file_name)
{
ofstream fichier(file_name,ios::out);
if(fichier)
{
map<int,string>::iterator it;
//ici map est un attribut de la classe event
for(it=map.begin();it!=map.end();it++)
{
fichier<<it->first<<'-';
i=0;
while(it->second[i]!='0')
{
//on suppose que le séparateur dans la chaine est #
if(it->second[i]==',')
fichier<<'#';
else
fichier<<it->second[i];
i++;
}
fichier<<"n";
}
fichier.close();
}
else
cerr<<"impossible d’ouvrir le fichier "<<endl;
}
 Q2 : Rajoutez une méthode où vous lisez les données contenues dans un fichier et vous remplissez la
map
[TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++
INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 6
void event::read_from_file(string file_name)
{
ifstream fichier(file_name, ios::in);
if(fichier)
{
string ligne,res=””,l=””;
int a,i;
while(getline(fichier,ligne))
{
i=0;
while(ligne[i]!='-')
{
res=res+ligne[i];
i++;
}
res[i]='0';
//convertir un tableau de char en entier
a=atoi(res);
i++;
while(ligne[i]!='0')
{
//séparateur dans la valeur de la map est « , »
if(ligne[i]=='#')
l=l+",";
else
l=l+ligne[i];
i++;
}
this->add_event(a,l);
}
fichier.close();
}
else
cerr<<"impossible d'ouvrir le fichier"<<endl;
}

Más contenido relacionado

La actualidad más candente

Ebook matlab
Ebook matlabEbook matlab
Ebook matlab
N NASRI
 
Debutermatlab
DebutermatlabDebutermatlab
Debutermatlab
nejmzad
 

La actualidad más candente (20)

Formation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objetFormation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objet
 
C# langage & syntaxe
C#   langage & syntaxeC#   langage & syntaxe
C# langage & syntaxe
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simples
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
 
Ebook matlab
Ebook matlabEbook matlab
Ebook matlab
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzles
 
Composition, agrégation et immuabilité
Composition, agrégation et immuabilitéComposition, agrégation et immuabilité
Composition, agrégation et immuabilité
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
Formation C# - Cours 4
Formation C# - Cours 4Formation C# - Cours 4
Formation C# - Cours 4
 
Csharp2014
Csharp2014Csharp2014
Csharp2014
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Debutermatlab
DebutermatlabDebutermatlab
Debutermatlab
 
Td pascal tdD
Td pascal tdDTd pascal tdD
Td pascal tdD
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelist
 

Similar a Correction TP4 Atelier C++ /GL2 INSAT / Tunisie

6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
CERTyou Formation
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
Khalil Lechheb
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
Khalil Lechheb
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
slimyaich3
 

Similar a Correction TP4 Atelier C++ /GL2 INSAT / Tunisie (20)

POO-chapitre3.pptx
POO-chapitre3.pptxPOO-chapitre3.pptx
POO-chapitre3.pptx
 
Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
 
Ch03
Ch03Ch03
Ch03
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
 
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptx
 
Cours c++
Cours c++Cours c++
Cours c++
 
Chapitre4 cours de java
Chapitre4 cours de javaChapitre4 cours de java
Chapitre4 cours de java
 
1 tdi synthese_principale_v2_2015.docx
1 tdi synthese_principale_v2_2015.docx1 tdi synthese_principale_v2_2015.docx
1 tdi synthese_principale_v2_2015.docx
 
Fascicule tp programmation c
Fascicule tp programmation cFascicule tp programmation c
Fascicule tp programmation c
 
Serie
SerieSerie
Serie
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Memo java
Memo javaMemo java
Memo java
 
Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3
 
Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdf
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
 

Más de Mariem ZAOUALI

Chap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en pythonChap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en python
Mariem ZAOUALI
 
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jms
Mariem ZAOUALI
 
Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia
Mariem ZAOUALI
 

Más de Mariem ZAOUALI (13)

Chap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en pythonChap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en python
 
Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers
 
Chap7 simulation numérique
Chap7 simulation numériqueChap7 simulation numérique
Chap7 simulation numérique
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en python
 
TP2 RMI
TP2 RMITP2 RMI
TP2 RMI
 
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jms
 
Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures reparties
 
Cours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corbaCours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corba
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de base
 
TP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec MatlabTP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec Matlab
 
Comment retrouver la forme récursive
Comment retrouver la forme récursiveComment retrouver la forme récursive
Comment retrouver la forme récursive
 
Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia
 

Último

Bilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdfBilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdf
AmgdoulHatim
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
ssuserc72852
 
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptxCopie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
ikospam0
 

Último (20)

Bilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdfBilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdf
 
STRATEGIE_D’APPRENTISSAGE flee_DU_FLE.pdf
STRATEGIE_D’APPRENTISSAGE flee_DU_FLE.pdfSTRATEGIE_D’APPRENTISSAGE flee_DU_FLE.pdf
STRATEGIE_D’APPRENTISSAGE flee_DU_FLE.pdf
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projet
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projetFormation échiquéenne jwhyCHESS, parallèle avec la planification de projet
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projet
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
Les roches magmatique géodynamique interne.pptx
Les roches magmatique géodynamique interne.pptxLes roches magmatique géodynamique interne.pptx
Les roches magmatique géodynamique interne.pptx
 
La mondialisation avantages et inconvénients
La mondialisation avantages et inconvénientsLa mondialisation avantages et inconvénients
La mondialisation avantages et inconvénients
 
les_infections_a_streptocoques.pptkioljhk
les_infections_a_streptocoques.pptkioljhkles_infections_a_streptocoques.pptkioljhk
les_infections_a_streptocoques.pptkioljhk
 
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANKRAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
 
L'expression du but : fiche et exercices niveau C1 FLE
L'expression du but : fiche et exercices  niveau C1 FLEL'expression du but : fiche et exercices  niveau C1 FLE
L'expression du but : fiche et exercices niveau C1 FLE
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptxCopie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
 
Intégration des TICE dans l'enseignement de la Physique-Chimie.pptx
Intégration des TICE dans l'enseignement de la Physique-Chimie.pptxIntégration des TICE dans l'enseignement de la Physique-Chimie.pptx
Intégration des TICE dans l'enseignement de la Physique-Chimie.pptx
 
Echos libraries Burkina Faso newsletter 2024
Echos libraries Burkina Faso newsletter 2024Echos libraries Burkina Faso newsletter 2024
Echos libraries Burkina Faso newsletter 2024
 
Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
Conférence Sommet de la formation 2024 : Développer des compétences pour la m...Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
 
Cours Généralités sur les systèmes informatiques
Cours Généralités sur les systèmes informatiquesCours Généralités sur les systèmes informatiques
Cours Généralités sur les systèmes informatiques
 
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
 
658708519-Power-Point-Management-Interculturel.pdf
658708519-Power-Point-Management-Interculturel.pdf658708519-Power-Point-Management-Interculturel.pdf
658708519-Power-Point-Management-Interculturel.pdf
 

Correction TP4 Atelier C++ /GL2 INSAT / Tunisie

  • 1. [TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++ INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 1 Prof : Mariem ZAOUALI – Niveau : GL2 1. Objectif de la séance Le but de la séance est de manipuler les notions suivantes :  Fonctions amies  Surcharge des opérateurs  Sauvegarde dans un fichier et récupération des données NB : Durant ce TP, créez les fichiers headers et leurs implémentations, le main fera l’objet d’un fichier .cpp à part 2. Fonctions amies On va reprendre l’exemple du cours. On veut développer une fonction intitulée vecteur produit (const matrice &, const vecteur &) avec :  Vecteur est le type de retour de la fonction produit  Vecteur et matrice sont deux classes à définir o Vecteur  Attribut : un tableau double de taille 3  Méthodes : Un constructeur et une méthode membre d’affichage du vecteur o Matrice  Attribut : un tableau de deux dimensions 3x3 de type double  Méthodes : un constructeur Question 1 : A votre avis, pourquoi choisit-on le passage de paramètres constants par référence ? Le passage de paramètres constants nous permet d’être à l’abri de toute tentative de modification de valeur du paramètre en question. Le passer par référence veut dire qu’on veut éviter de le copier. En combinant les deux modes ensemble, et c’est bel et bien le cas du constructeur par recopie, l’objet passé en paramètre ne peut être ni modifié, ni avoir une copie … utile pour un accès en « lecture seule ». Question 2 : Où peut-on définir cette fonction, dans la classe vecteur ou matrice ? Justifier votre réponse. Cette fonction doit être définie/déclarée dans une autre classe à part matrice et vecteur. Ceci est grâce au fait que la signature de la fonction comprend les deux types matrice et vecteur comme paramètre. Question 3 : Écrivez un petit programme de test. On fournira séparément les deux déclarations de chacune des classes, la définition du produit et le programme de test. //vecteur.h class matrice; //pour pouvoir compiler la déclaration du vecteur class vecteur {
  • 2. [TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++ INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 2 private: double tab[3]; public : vecteur(); vecteur(double,double,double); void affichage(); friend vecteur produit(const matrice&,const vecteur &); }; //matrice.h class vecteur; class matrice { private : double mat[3][3]; public: matrice(); matrice(double t[3][3]); friend vecteur produit(const matrice&,const vecteur&); }; //vecteur.cpp #include "vecteur.h" #include "matrice.h" #include <iostream> using namespace std; vecteur::vecteur() { for(int i=0; i<3; i++) tab[i]=0; } vecteur::vecteur(double a,double b,double c) { tab[0]=a; tab[1]=b; tab[2]=c; } void vecteur::affichage() { for (int i=0; i<3; i++) cout<<tab[i]<<" "; }
  • 3. [TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++ INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 3 //matrice.cpp #include "matrice.h" #include "vecteur.h" #include <iostream> using namespace std; matrice::matrice() { for (int i=0; i<3; i++) for (int j=0; j<3; j++) mat[i][j]=0; } matrice::matrice (double t [3] [3]) { int i ; int j ; for (i=0 ; i<3 ; i++) for (j=0 ; j<3 ; j++) mat[i] [j] = t[i] [j] ; } //main.cpp //Définition de la fonction produit #include "vecteur.h" #include "matrice.h" #include <iostream> using namespace std; vecteur produit(const matrice &m,const vecteur &x) { vecteur v; for (int i=0; i<3; i++) for (int j=0; j<3; j++) v.tab[i] += m.mat[i] [j] * x.tab[j] ; return v; } Int main() { vecteur w (1,2,3), res ; double tab [3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 } ; matrice a; //Remplir la matrice a par les valeurs du tab res = produit(a, w) ; res.affiche () ;
  • 4. [TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++ INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 4 return 0 ; } 3. Surcharge des opérateurs On va rajouter d’autres méthodes à la classe vecteur. Définissez les opérateurs == et != de manière qu’ils permettent de tester si deux vecteurs ont les même valeurs ou pas. a. en utilisant des fonctions membres // on rajoute ces lignes au niveau de la classe vecteur.h int operator ==(vecteur); int operator !=(vecteur); //définir au niveau de la classe vecteur.cpp int vecteur::operator == (vecteur v) { for (int i=0; i<3; i++) if(v.tab[i]!=this->tab[i]) return 0; return 1; } int vecteur::operator != (vecteur v) { for (int i=0; i<3; i++) if(v.tab[i]!=this->tab[i]) return 1; return 0; } b. en utilisant des fonctions amies. // on rajoute ces lignes au niveau de la classe vecteur.h friend int operator ==(vecteur,vecteur); friend int operator !=(vecteur,vecteur); //définir au niveau de la classe main.cpp Int operator == (vecteur v, vecteur w) { for (int i=0; i<3; i++) if(v.tab[i]!=w.tab[i]) return 0; return 1; } int operator != (vecteur v, vecteur w) { for (int i=0; i<3; i++) if(v.tab[i]!=w.tab[i])
  • 5. [TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++ INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 5 return 1; return 0; } 4. Sauvegarde dans un fichier et récupération des données Nous allons manipuler dans ce dernier exercice, la lecture et l’écriture des données d’un fichier avec C++. Il s’agit d’améliorer l’exercice de Homework fait en TP3. On veut rajouter la possibilité que l’utilisateur peut enregistrer le contenu de la map dans un fichier, ou remplir la map à partir d’un fichier.  Q1 : Rajoutez une méthode où vous stockez les données de la map dans un fichier. //On suppose que la classe est appelée event void event::insert_file(string file_name) //Dans event.h , l’entête de la méthode sera la suivante void event::insert_file(string file_name) { ofstream fichier(file_name,ios::out); if(fichier) { map<int,string>::iterator it; //ici map est un attribut de la classe event for(it=map.begin();it!=map.end();it++) { fichier<<it->first<<'-'; i=0; while(it->second[i]!='0') { //on suppose que le séparateur dans la chaine est # if(it->second[i]==',') fichier<<'#'; else fichier<<it->second[i]; i++; } fichier<<"n"; } fichier.close(); } else cerr<<"impossible d’ouvrir le fichier "<<endl; }  Q2 : Rajoutez une méthode où vous lisez les données contenues dans un fichier et vous remplissez la map
  • 6. [TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++ INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 6 void event::read_from_file(string file_name) { ifstream fichier(file_name, ios::in); if(fichier) { string ligne,res=””,l=””; int a,i; while(getline(fichier,ligne)) { i=0; while(ligne[i]!='-') { res=res+ligne[i]; i++; } res[i]='0'; //convertir un tableau de char en entier a=atoi(res); i++; while(ligne[i]!='0') { //séparateur dans la valeur de la map est « , » if(ligne[i]=='#') l=l+","; else l=l+ligne[i]; i++; } this->add_event(a,l); } fichier.close(); } else cerr<<"impossible d'ouvrir le fichier"<<endl; }