Corrections Serié_3 GL_S4 C++ classes Heritage

9
Page 1 Travaux pratiques C++ GL/S4 : Série N° : 3 Les Classes, L’héritage DEVELOPPER LES EXERCICES SUIVANTS AVEC C++ EXERCICE 1: Créer une classepersonnel comprenant 3 données membres (nom, position, salaire),un constructeur initialisant les données membres et une fonction affiche_personnelqui affiche les informations sur le personnel. Créer une classe patrondérivantpubliquement de la classepersonnel et ayant 2données membres (bonus_annuel, marque de voiture de fonction), un constructeurinitialisant les données membres et une fonction affiche_patron qui affiche lesinformations sur le patron (entant que membre du personnel et patron). Créer un programme permettant de tester ces classes. EXERCICE 2 : Définition d’une classe dérivée, droits d’accès 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) Réaliser une classe PointA, dérivée de Point disposant d’une méthode afficheaffichant (en fenêtre console) les coordonnées d’un 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 méthodes getX et getY ? EXERCICE 3 : Définition d’une classe dérivée, droits d’accès On dispose de la classe suivante (disposant cette fois d’un 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 ; }

description

Correction POO

Transcript of Corrections Serié_3 GL_S4 C++ classes Heritage

  • 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