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 ?
Question 2 : Où peut-on définir cette fonction, dans la classe vecteur ou matrice ? Justifier votre réponse.
Question 3 : Écrivez un petit programme de test. On fournira séparément les deux déclarations de chacune
des classes, la définition de produit et le programme de test.
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;
b. en utilisant des fonctions amies.
4. Sauvegarde dans un fichier et récupération des données
2. [TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++
INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 2
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.
Q2 : Rajoutez une méthode où vous lisez les données contenues dans un fichier et vous remplissez la
map
Le fichier doit avoir cette structure :
2007-event1#event2#event3#
2008-event1#event2#event3#
2009-event1#event2#event3#
2010-event1#event2#event3#
Annexe : Les flots d’entrée et de sortie dans C++1
Cas de lecture du fichier
#include <iostream>
#include <fstream> // Cet ajout nous permettra d’utiliser ifstream (flux pour la lecture) et ofstrem pour l’écriture
#include <string>
using namespace std;
int main()
{
ifstream fichier("test.txt", ios::in); // on ouvre le fichier en lecture – ios ::in mode d’ouverture et in pour dire
input
if(fichier) // si l'ouverture a réussi
{
// instructions
string contenu; // déclaration d'une chaîne qui contiendra la ligne lue
while(getline(fichier, ligne)) // tant que l'on peut mettre la ligne dans "contenu"
{
cout << ligne << endl; // on l'affiche
}
fichier.close(); //N’OUBLIEZ PAS DE FERMER LE FICHIER
}
else // sinon
cerr << "Impossible d'ouvrir le fichier !" << endl;
return 0;
1
http://openclassrooms.com/courses/lecture-et-ecriture-dans-les-fichiers-en-c
3. [TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++
INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 3
}
Cas de l’écriture du fichier
Les modes d'ouverture sont :
ios::out (pour output) : spécifie qu'on ouvre le fichier en écriture. Obligatoire - mais par défaut - quand
on utilise un objet ofstream ;
ios::app (pour append = ajouter à la suite) : lorsqu'on ouvre le fichier en écriture, on se trouve à la fin
pour écrire des données à la suite du fichier (sans effacer le contenu, s'il y en a un). Avec ce mode
d'ouverture, à chaque écriture, on est placé à la fin du fichier, même si on se déplace dans celui-ci avant
(on verra comment se déplacer un peu plus tard );
ios::trunc (pour truncate = tronquer) : lorsqu'on ouvre le fichier en écriture, spécifie qu'il doit être effacé
s'il existe déjà, pour laisser un fichier vide ;
ios::ate (pour at end) : ouvre le fichier en écriture et positionne le curseur à la fin de celui-ci. La
différence avec ios::app est que si on se repositionne dans le fichier, l'écriture ne se fera pas forcément à
la fin du fichier, contrairement à ios::app.
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
ofstream fichier("test.txt", ios::out | ios::trunc); // ouverture en écriture avec effacement du fichier ouvert
if(fichier)
{
string message = " Atelier C++ GL2";
int promotion = 2014;
fichier << " C'est la fin de : " << message << '/' << "promotion" << '/' << promotion << endl;
fichier << "Bonne continuation " ;
fichier.close();
}
else
cerr << "Impossible d'ouvrir le fichier !" << endl;
return 0;
}