Vous êtes sur la page 1sur 8

TD1 POO (C++) - Correction

But :
• Rappel des notions passage de paramètres (par valeur et par adresse)
• Passage par référence en C++ et ses avantages.
• Nouvelles possibilités d’Entrées/sorties en C++ (opérateurs << et >>)
• Commentaires de ligne (//)
• Déclaration libre des variables
Exercice 1

1. Définir une fonction Permute qui permet d’échanger les valeurs de variables réelles.

Faire de deux façons différentes (par adresse et par référence).

2. Tester à l’aide d’une fonction principale main en utilisant les nouvelles possibilités

d’E/S de C++. Expliquer la différence.

#include <iostream>
using namespace std;

// Permutation avec un passage de paramètres par référence


void permutRef (int& a, int& b);

// Permutation avec un passage de paramètres par adresse


void permutAdr (int*, int*);

int main() {
int X,Y;
cout << "X= ";
cin >> X;
cout << "Y= ";
cin >> Y;
permutRef(X,Y);
//permutAdr (&X,&Y);
cout <<"X= " <<X <<endl;
cout <<"Y= " <<Y;
return 0;
}

void permutRef (int& a, int& b)


{
int c=a;
a=b;
b=c;
}
void permutAdr (int* a, int* b)
{
int c=*a;
*a=*b;

Pr. A.EL BYED Page 1


TD1 POO (C++) - Correction

*b=c;
}
Exercice 2

1. Définir une structure Employe qui regroupe les informations : matricule (entier) , le

nom (chaine), prénom(chaine), date naissance (struct Date à définir avant), situation

familiale(caractère Célibataire, Marié, Divorcé).

2. Définir une fonction Saisie qui fait la saisie des informations concernant un employé.

Utiliser les nouvelles possibilités d’E/S de C++ et le passage par référence.

3. Définir une fonction Affiche qui fait l’affichage des informations concernant un

employé. Utiliser les nouvelles possibilités d’E/S et le passage par valeur

4. Est-ce qu’on peut remplacer le passage par valeur par un passage par référence ?

Si la réponse est oui, expliquer les avantages et les risques.

5. Définir une fonction qui Modifie change la situation familiale d’un employé en

utilisant la meilleure façon de passage de paramètres.

6. Tester à l’aide d’une fonction main.

#include <iostream>
#include <string>
using namespace std;

struct date {
int jour;
int mois;
int annee;
};
struct employe {
int matricule;
string nom;
string prenom;
char situation;
struct date naissance ;
};

// Les prototypes
void Saisir(struct employe &) ;
void afficher(const struct employe&);
void modifier ( struct employe &);

Pr. A.EL BYED Page 2


TD1 POO (C++) - Correction

void Saisir(struct employe &e){


cout << "Saisir le matricule : " ;
cin >> e.matricule ;
cout << "Saisir le nom : " ;
cin >> e.nom ;
cout << "Saisir le prenom : " ;
cin >> e.prenom ;
cout << "Saisir la situation : " ;
cin >> e.situation ;
cout << "Saisir la date (le jour , le mois et apres l'annee ) : " ;
cin >> e.naissance.jour >> e.naissance.mois >> e.naissance.annee ;
}
void afficher(const struct employe &e){

cout << "le nom complet : "<<e.nom <<" "<<e.prenom <<endl;


//cout << "le prenom : "<<e.prenom<<endl;
cout << "le matricule : "<<e.matricule<<endl;
cout << "la situation familliale : "<<e.situation<<endl;
cout << "la date de naissance :
"<<e.naissance.jour<<"/"<<e.naissance.mois<<"/"<<e.naissance.annee<<endl;
}
void modifier ( struct employe &e )
{
cout <<"saisir la nouvelle situation familiale : " ;
cin >> e.situation ;

}
int main(){
employe emp ;
Saisir(emp) ;
afficher(emp);
modifier (emp) ;
afficher (emp) ;
return 0 ;
}

Exercice 3

Reprendre le programme précédent en utilisant les concepts de l’Orientée Objet.

Correction : pour cette exercice on va créer deux classes Date et Employee. Par

conséquent notre projet doit contenir cinq fichiers, à savoir :

• Date.h : le prototype de l’objet Date ;

• Date.cpp : l’implémentation de la classe Date

• Employee.h : le prototype de l’objet Employee ;

Pr. A.EL BYED Page 3


TD1 POO (C++) - Correction

• Employee.cpp : l’implémentation de la classe Employee

• mainEmployeeOO.cpp : le fichier qui contient la fonction main pour tester l’objet

employée.

1. mainEmployeeOO.cpp

#include <iostream>
#include "DateNaissance.h"
#include "Employe.h"

using namespace std;

// Les prototypes
void Saisir(Employe &) ;
void Modifier(Employe &);

void Saisie(Employe& e)
{
int mat, j, m,a;
string n,p;
char stF;
cout <<"Saisir votre Matricule: "; cin >>mat;
cout <<"Saisir votre nom: "; cin >> n;
cout << "Saisir votre prenom: "; cin >>p;
cout << "Saisir votre Situation Familiale (C,M ou D): "; cin >>stF;
cout <<"Saisir votre date de naissance (jours, mois puis annee): ";
cin>>j>>m>>a;
e.set_matricule(mat);
e.set_nom(n);
e.set_prenom(p);
e.set_situationFamiliale(stF);
DateNaissance d(j,m,a);
e.set_dateDeNaissance(d);
}

void Modifie(Employe& e)
{
char stF;
cout <<"Saisir la nouvelle valeur de votre situation Familaile: ";
cin >>stF;
e.set_situationFamiliale(stF);
}

int main() {
Employe e;
Saisie(e);
e.Affiche();
Modifie(e);

Pr. A.EL BYED Page 4


TD1 POO (C++) - Correction

e.Affiche();
return 0;
}
2. Date.h

#ifndef DATENAISSANCE_H
#define DATENAISSANCE_H

class DateNaissance
{

public:
DateNaissance();
DateNaissance(int, int, int);
~DateNaissance();
int get_jour();
int get_mois();
int get_annee();
void set_jour(int);
void set_mois(int);
void set_annee(int);
private:
int jour;
int mois;
int annee;
};

#endif
3. Date.cpp

#include "DateNaissance.h"

DateNaissance::DateNaissance()
{
// jour=1;
// mois=1;
// annee=2018;
}

DateNaissance::DateNaissance(int j, int m, int a)


{
jour = j;
mois = m;
annee = a;
}
DateNaissance::~DateNaissance()
{
}
int DateNaissance::get_jour()

Pr. A.EL BYED Page 5


TD1 POO (C++) - Correction

{
return jour;
}
int DateNaissance::get_mois()
{
return mois;
}
int DateNaissance::get_annee()
{
return annee;
}

void DateNaissance::set_jour(int j)
{
jour = j;
}

void DateNaissance::set_mois(int m)
{
mois = m;
}

void DateNaissance::set_annee(int a)
{
annee = a;
}
4. Employee.h

#ifndef EMPLOYE_H
#define EMPLOYE_H
#include <string>
#include "DateNaissance.h"
//using namespace std;

class Employe
{
public:
Employe();
Employe(int, std::string, std::string, char, DateNaissance);
~Employe();
int get_matricule();
std::string get_nom();
std::string get_prenom();
char get_situationFamiliale();
DateNaissance get_dateDeNaissance();
void set_matricule(int);
void set_nom(std::string);
void set_prenom(std::string);
void set_situationFamiliale(char);
void set_dateDeNaissance(DateNaissance);

Pr. A.EL BYED Page 6


TD1 POO (C++) - Correction

void Affiche();
private:
int matricule;
std::string nom;
std::string prenom;
char situationFamiliale;
DateNaissance dateDeNaissance ;

};

#endif
5. Employee.cpp

#include <iostream>
#include "Employe.h"
#include "DateNaissance.h"

using namespace std;

Employe::Employe()
{
}

Employe::Employe(int mat, string n, string p, char st, DateNaissance d)


{
matricule = mat;
nom = n;
prenom = p;
situationFamiliale = st;
dateDeNaissance = d;
}
Employe::~Employe()
{
}

void Employe::Affiche()
{
cout <<"Matricule: " << matricule;
cout <<endl<<"Nom complet: " <<nom <<" " <<prenom;
cout <<endl<<"Situation Familiale: "<<situationFamiliale;
cout <<endl<<"Date de naissance:
"<<dateDeNaissance.get_jour()<<"/"<<dateDeNaissance.get_mois()<<"/"
<<dateDeNaissance.get_annee()<<endl;
}

int Employe::get_matricule(){return matricule;}


string Employe::get_nom(){return nom;}
string Employe::get_prenom(){return prenom;}

Pr. A.EL BYED Page 7


TD1 POO (C++) - Correction

char Employe::get_situationFamiliale(){return situationFamiliale;}


DateNaissance Employe::get_dateDeNaissance(){return dateDeNaissance;}

void Employe::set_matricule(int m){ matricule = m;}


void Employe::set_nom(string n){ nom = n;}
void Employe::set_prenom(string p){ prenom = p;}
void Employe::set_situationFamiliale(char st){ situationFamiliale = st;}
void Employe::set_dateDeNaissance(DateNaissance d){ dateDeNaissance = d;}

Pr. A.EL BYED Page 8

Vous aimerez peut-être aussi