Post on 17-Sep-2015
description
Page 1
Travaux pratiques C++
GL/S4 : Srie N : 3
Les Classes, Lhritage
DEVELOPPER LES EXERCICES SUIVANTS AVEC C++
EXERCICE 1: Crer une classepersonnel comprenant 3 donnes membres (nom, position,
salaire),un constructeur initialisant les donnes membres et une fonction affiche_personnelqui affiche les informations sur le personnel. Crer une classe patrondrivantpubliquement de la classepersonnel et ayant
2donnes membres (bonus_annuel, marque de voiture de fonction), un constructeurinitialisant les donnes membres et une fonction affiche_patron qui
affiche lesinformations sur le patron (entant que membre du personnel et patron). Crer un programme permettant de tester ces classes.
EXERCICE 2 : Dfinition dune classe drive, droits daccs
On dispose de la classe suivante : class Point {
public void initialise (int x, int y) { this.x = x ; this.y = y ; } public void deplace (int dx, int dy) { x += dx ; y += dy ; } public int getX() { return x ; }
public int getY() { return y ; } private int x, y ;
} a) Raliser une classe PointA, drive de Point disposant dune mthode
afficheaffichant (en fentre console) les coordonnes dun point. Ecrire un petit programme utilisant les deux classes Point et PointA.
b) Que se passerait-il si la classe Point ne disposait pas des mthodes getX et getY ?
EXERCICE 3 : Dfinition dune classe drive, droits daccs
On dispose de la classe suivante (disposant cette fois dun constructeur) : class Point
{ public Point (int x, int y) { this.x = x ; this.y = y ; } public void affCoord() { System.out.println ("Coordonnees : " + x + " " + y) ;
} private int x, y ;
}
Page 2
Raliser une classe PointNom, drive de Point permettant de manipuler des points
dfinispar leurs coordonnes (entires) et un nom (caractre). On y prvoira les mthodessuivantes : constructeur pour dfinir les coordonnes et le nom dun objet de type PointNom, affCoordNom pour afficher les coordonnes et le nom dun objet de type PointNom. crire un petit programme utilisant la classe PointNom.
EXERCICE 4: Redfinition
On dispose de la classe suivante : class Point
{ public Point (int x, int y) { this.x = x ; this.y = y ; } public void affiche()
{ System.out.println ("Coordonnees : " + x + " " + y) ; } private int x, y ;
} Raliser une classe PointNom, drive de Point permettant de manipuler des points
dfinispar leurs coordonnes et un nom (caractre). On y prvoira les mthodes suivantes : constructeur pour dfinir les coordonnes et le nom dun objet de type PointNom, affiche pour afficher les coordonnes et le nom dun objet de type PointNom
EXERCICE 5 : Hritage, polymorphisme
Crer une classe Etudiant ayant les mmes caractristiques qu'une Personne plus une liste de matires suivies et un ensemble de notes. On doit pouvoir obtenir la liste
des matires, affecter une note, calculer la moyenne. Crer une classe Enseignant ayant les mmes caractristiques qu'une Personne plus une liste de matires enseignes, un nombre d'heures par matire et un tarif horaire.
On doit pouvoir obtenir les matires, faire un calcul du nombre d'heures total et dterminer le cot de l'enseignant. Les fonctions membres de Etudiant et de
Enseignant doivent pouvoir manipulerdirectement les donnes de la classe Personne. Modifier en consquence cette classe. Crer un tableau d'Etudiant et un tableau d'Enseignant. Les initialiser. Crer
untableau de pointeurs de Personne et affecter selon votre choix ces personnes soitun tudiant soit un enseignant. Afficher l'ensemble des caractristiques de cespersonnes "polymorphes". Les dtruire.
Page 3
SOLUTIONS
EXERCICE 1 : #include
#include
#include
class personnel{
char *nom;
char *position;
int salaire;
public:
personnel(char *nm, char *pos, int sal);
void affiche_personnel();
};
class patron:public personnel{
int bonus_annuel;
char* marque_voiture;
public :
patron(int b_a, char* m_v,char *nm, char *pos, int sal);
void affiche_patron();
};
personnel::personnel(char *nm, char *pos, int sal){
cout
Page 4
a.affiche_patron();
getch();
}
EXERCICE 2 :
#include
#include
using namespace std ; /* Dclaration de la classe point */
class Point{ /* dclaration des membres privs */
private:
int x ;
int y ; /* dclaration des membres publics */
public :
void initialise (int, int) ;
void deplace (int, int) ;
void affiche () ;
} ; //Dfinition des fonctions membres de la classe
void Point::initialise(int a, int b)
{int x = a; int y = b; }
void Point::deplace(int dx, int dy)
{ x += dx; y += dy; } /* Dclaration et dfinition de la classe pointcol */
class pointA : public Point // pointcol drive de point
{
public:
void affiche() {
cout
Page 5
using namespace std ;
class TsPointN
{
private:
int x, y ; public:
// Dclaration et dfinition des fonctions
void setPoint (int a, int b)
{ x = a ; y = b ; }
void deplace (int dx, int dy) { x += dx ; y += dy ; }
void affCoord (){ cout
Page 6
En dfinitive, voici ce que pourrait tre la dfinition de notre classe PointNom :
#include
#include
using namespace std ;
/* Dclaration de la classe point */ class Point
{ /* dclaration des membres privs */
private:
int x ;
int y ;
/* dclaration des membres publics */ public :
void setPoint (int, int) ;
char setNom(char nom);
void deplace (int, int) ; void affCoord () { cout
Page 7
pn2.affCoordNom() ; // methode de PointNom
pn2.affCoord() ; // methode de Point
getch();
}
EXERCICE 5 : #include
#include
void menu_etudiant();
void menu_enseignant(); class personne {
char nom[20];
char prenom[20];
int age;
public: personne(char n[20]="",char p[20]="",int a=0) {
strcpy(nom,n);
strcpy(prenom,p);
age=a;
}
void identification() { coutnom;
coutprenom;
coutage;
}
void affiche() {
cout
Page 8
}
void affiche() {
float moy=0;
personne::affiche();
cout
Page 9
total_salaire = total_heure * tarif_horraire;
cout