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 : 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.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
 
#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 : 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;     
}
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
 
#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 : 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
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                
}
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


...
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