problème d'héritage en c++
Bonjour à tous (bonsoir plutot :) )
Voila j'ai un petit soucis dont je n'arrive pas à trouver la solution.
Je suis actuellement en train de découvrir le c++ et viens de me lancer dans l'héritage.
Jusque la tout ce passait à peu près normalement sauf que je n'arrive pas à acceder à une methode de ma classe mère.. Et je ne sais pas trop pourquoi..
Voici le code :
Je vous explique après ce qui cloche ..
Main.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#include <cstdlib>
#include <iostream>
#include "personnes.h"
#include "etudiants.h"
using namespace std;
int main(void)
{
int i = 1;
Personnes fontm(i,"Font","Mic","contact@fontmic.truc");
i++; // on incremente l'identifiant
Personnes fontn(i,"Font","Nic","fontnic@yahoo.fr");
i++; // on incremente l'identifiant
fontm.getInfos();
fontn.getInfos();
cout << endl;
cout << "** Changement de l'email fontn" << endl;
cout << endl;
fontn.setMail("fonfonnini@yahoo.fr");
fontn.getInfos();
// -- on va essayer maintenant de spécifier tout ça et de faire un étudiant :)
cout << endl;
cout << "****************************" << endl;
cout << "** Creation d'un Etudiant : " << endl;
cout << "****************************" << endl;
cout << endl;
Etudiants gab(i,"La","Gab","ga@hotmail.fr",2006,false);
i++; // on incremente l'identifiant
gab.getInfos();
// va laisser le temps à l'utilisateur de lire les informations et va attendre
// une action de sa part
system("PAUSE");
return EXIT_SUCCESS;
} |
Personnes.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
#ifndef _PERSONNES_H_
#define _PERSONNES_H_
class Personnes
{
private :
int identifiant;
char * nom, * prenom, * mail; // attention de bien mettre * devant chaque chaine
public:
// constructeurs
Personnes(); // par defaut
Personnes(int &,char*,char*,char*); // par initialisation
Personnes(const Personnes &); // par copie
// destructeur
~Personnes();
// methodes de la classe
void getInfos(); // acceder aux informations de la personne
void setNom(char *); // changer son nom
void setPrenom(char *); // changer son prenom
void setMail(char *); // changer son mail
// notons que nous ne changerons pas son identifiant qui est unique
};
#endif |
Personnes.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
#include <iostream>
#include "personnes.h"
using namespace std;
// ****************************************************************************
// *********** debut de la déclaration des constructeurs destructeur **********
// ****************************************************************************
// constructeur par defaut
Personnes::Personnes()
{
identifiant = 1;
nom = "defaut";
prenom = "defaut";
mail = "defaut@defaut.fr";
}
// constructeur par initialisation
Personnes::Personnes(int & ident, char * name, char * firstname, char * courriel)
{
identifiant = ident;
nom = name;
prenom = firstname;
mail = courriel;
}
// constructeur par copie
Personnes::Personnes(const Personnes & pers)
{
identifiant = pers.identifiant;
nom = pers.nom;
prenom = pers.prenom;
mail = pers.mail;
}
// destructeur
Personnes::~Personnes()
{
}
// ***************************************************************************
// *********** debut de la déclaration des methodes **************************
// ***************************************************************************
// permettra l'affichage des informations des personnes
void Personnes::getInfos()
{
cout << " ---------------------------------------------------------- " << endl;
cout << " -- Informations relatives a :" << nom << " " << prenom << endl;
cout << " -- Identifiant : " << identifiant << endl;
cout << " -- Mail : " << mail << endl;
}
// permettra la modification du nom de la personne
void Personnes::setNom(char * newname)
{
nom = newname;
}
// permettra la modification du prenom de la personne
void Personnes::setPrenom(char * newpren)
{
prenom = newpren;
}
// permettra la modification du mail de la personne
void Personnes::setMail(char * newmail)
{
mail = newmail;
} |
Etudiants.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
#ifndef _ETUDIANTS_H_
#define _ETUDIANTS_H_
#include "personnes.h" // fichier d'entete herite
class Etudiants : public Personnes
{
private :
int promotion;
bool boursier;
char * vraifaux;
// tableau de float contenant les notes
public:
// constructeurs
Etudiants(); // par defaut
Etudiants(int &,char*,char*,char*,int,bool); // constructeur par initialisation
Etudiants(const Etudiants &); // constructeur par defaut
~Etudiants(); // destructeur
void getInfos(); // accès aux nouvelles informations ainsi qu'aux précédentes
void setBourses(bool); // modification des bourses
void addNotes(int,float); // ajout de notes
};
#endif // _ETUDIANTS_H_ |
Et enfin Etudiants.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#include <iostream>
#include "etudiants.h"
#include "personnes.h"
using namespace std;
// *********************************************************************
// *********** Déclaration des constructeurs et destructeurs ***********
// *********************************************************************
// constructeur par défault
Etudiants::Etudiants()
{
Personnes(); // création d'une personne vide
promotion = 2006; // complement d'informations
boursier = false; // complement d'informations
}
// constructeur par initialisation
Etudiants::Etudiants(int & ident, char * name, char * firstname, char * email, int promo, bool bours)
{
Personnes(ident,name,firstname,email);
promotion = promo;
boursier = bours;
}
// constructeur par copie
Etudiants::Etudiants(const Etudiants & e)
{
Personnes((Personnes) e);
promotion = e.promotion;
boursier = e.boursier;
}
// destructeur
Etudiants::~Etudiants(){}
// *********************************************************************
// *********** Déclaration des méthodes diverses à la classe ***********
// *********************************************************************
void Etudiants::getInfos()
{
// test pour l'affichage en texte du status de boursier ou non
if(boursier == false)
{
vraifaux = "non";
}
else
{
vraifaux = "oui";
}
this->Personnes::getInfos(); // accède normalement aux informations de la personne
cout << " -- Promotion : " << promotion << endl; // affichage supplémentaire
cout << " -- boursier ? : " << vraifaux << endl; // affichage supplémentaire
} |
|
|
\ /
Pour résumer :)
Tout ce passe dans cette petite méthode :)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
void Etudiants::getInfos()
{
// test pour l'affichage en texte du status de boursier ou non
if(boursier == false)
{
vraifaux = "non";
}
else
{
vraifaux = "oui";
}
this->Personnes::getInfos(); // accède normalement aux informations de la personne
cout << " -- Promotion : " << promotion << endl; // affichage supplémentaire
cout << " -- boursier ? : " << vraifaux << endl; // affichage supplémentaire
} |
Comme vous pouvez le voir dans le main je créer un nouvel étudiant avec certaines informations.
Par la suite je construis une nouvelle personne avec ces mêmes informations, et je complete avec les informations de mon étudiants..
J'aimerais afficher les info de la personne et les info complementaires.
C'est ici que ça beugue, il m'affiche bien les info de la personne, mais prend les information du constructeur par défaut.
En gros ça m'affiche ça
Citation:
...
blabla des autres trucs d'avant qui fonctionnent ...
...
----------------------------------------------------------
-- Informations relatives a : defaut defaut
-- Identifiant : 1
-- Mail :defaut
-- promotion : 2006
-- boursier : non
Comme vous pouvez le constater ce n'est pas ce que je recherche.
La classe personne fonctionne correctement
J'ai essayer avec et sans le this-> devant Personnes::getInfos() de mon GetInfos d'Etudiants.
Savez vous pourquoi cette drole de chose m'arrive t'elle?
En vous remerciant d'avance j'espère que vous saurez m'indiquer une réponse.
Merci.. :)
Bonne nuit à vous :)