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
Personnes.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Etudiants.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Et enfin Etudiants.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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_
|
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Comme vous pouvez le voir dans le main je créer un nouvel étudiant avec certaines informations.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 }
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
Comme vous pouvez le constater ce n'est pas ce que je recherche.
...
blabla des autres trucs d'avant qui fonctionnent ...
...
----------------------------------------------------------
-- Informations relatives a : defaut defaut
-- Identifiant : 1
-- Mail :defaut
-- promotion : 2006
-- boursier : non
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![]()
Partager