IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème d'acces aux parametres d'un classe mère


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 29
    Points : 21
    Points
    21
    Par défaut Problème d'acces aux parametres d'un classe mère
    Bonjour !

    Mon probleme est le suivant, j ai declaré deux classe. la seconde dérive de la premiere de maniere public. j ai une map<int, int> declarée dans ma classe mère en public.
    Je souhaite modifier cette map depuis ma classe fille et depuis l'exterieur de mes classe en l'appeler avecle nom de la classe mere (mere->map).
    Seulement, les modifications que j'effectue sur ma map depuis la classe fille ne semblent pas repercutée sur la map de la classe mere ...
    Est-ce qu une copie serrait faite au moment de la declaration de la classe fille ?
    Y a-t-il un moyen de n'avoir qu une seule et meme map ?
    Ou alors il y a un truc que je n'ai pas saisit !

    eclairez moi s'il vous plait ! ;)

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 219
    Points : 44
    Points
    44
    Par défaut
    As-tu bien mis la map comme attribut protected ou public dans ta classe mère (si elle est privée le problème vient peut-être de là...)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    Non nonmamapest bien en public :)
    J'aurais dut le preciser c est vrai.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ca ressemble à un passage de paramètre par copie. Montre nous le code qui manipule ta map.

  5. #5
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Si je comprends bien dans tout ton logiciel "map" est unique et doit être modifiable à partir de partout ?

    alors:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Mere
    {
    public:
       static map<int, int>gMap;
    };
    puis partout dans ton code Mere::gMap te permet d'accéder à ta variable

    Mais c'est à utiliser que sur certaines circonstances au risque d'avoir un code non viable !

    Un peu de code ne serait pas de refus

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    Bon je vais essayer de mettre un morceau de code qui illustre clairement mon probleme parce que je peux clairement pas tout mettre! :)

    Déclaration de ma classe mère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class	plateau
    {
    public:
    	map<int, int>	goban;
    	plateau();
    	void print_goban();
    };
    Déclaration de ma classe fille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class	gomotree : public plateau
    {
    public:
            ...
    	gomotree(){};
    protected:
    	gomotree	*son[MAX_BRO];
    };
    Exemple d'utilisation :

    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
     
    int	main(int ac, char **av)
    {
    	plateau go;
    	gomotree	tree;
     
    	go.print_goban();
    	tree.put_first_stone(); // premieremodification de la map
    	cout <<"please play :";
    	cin >> o;
    	tree.goban[o] = 2;    // seconde modification de la map
    	go.print_goban();      // la modification n apparait pas
    	tree.print_goban();    // la modification apparait
    	cin>>i;
    	return (0);
    }
    Voila j'espere que c'est assez clair ! :)

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 180
    Points : 86
    Points
    86
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tree.put_first_stone(); // premieremodification de la map
    ou dis tu ici que la modification doit etre faite dans la map de la classe??

    peut etre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (tree.goban).put_first_stone(); // premieremodification de la map
    ??

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    En fait la fonction put_first_stone() fait plusieurs autres choses dont la modification de la map mais voila son code :

    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	gomotree::put_first_stone()
    {
    	unsigned int	seed;
    	int ran;
    	time_t timestamp;
    	struct tm t;
     
    	timestamp = time (NULL);
    	gmtime_s(&t, &timestamp);
    	seed = t.tm_sec * t.tm_min * t.tm_hour * t.tm_year;
    	srand(seed);
    	ran = rand() % (GOBAN);
    	goban[ran-1] = 1; 
    	print_goban();
    }

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 35
    Points : 31
    Points
    31
    Par défaut
    en fait, je crois qu'il ya une incompréhension de ton problème.

    Si je comprends bien, tu as créer une instance de la classe plateau, et une instance de la classe gomotree. Maintenant, tu aimerais que la map soit la même pour ces deux instances...

    Si c'est le cas, il faut déclarer ta map en static.

  10. #10
    Membre habitué Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Points : 187
    Points
    187
    Par défaut
    Citation Envoyé par findwin
    en fait, je crois qu'il ya une incompréhension de ton problème.

    Si je comprends bien, tu as créer une instance de la classe plateau, et une instance de la classe gomotree. Maintenant, tu aimerais que la map soit la même pour ces deux instances...

    Si c'est le cas, il faut déclarer ta map en static.
    Il me semble que si map est déclarée en static, elle sera commune pour toutes les instances de cette class et donc pas seulement pour ces deux là ...

    Marco85
    If you cannot explain a concept to a six year-old, then you do not fully understand it. [Albert Einstein]

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 35
    Points : 31
    Points
    31
    Par défaut
    oui, c'est le cas.

    sinon, il est possible d'utiliser un pointeur sur une map dans la classe fille plutot que d'hériter de la map elle même...

    mais après, on ne connait pas l'utilisation de ces classes alors...

  12. #12
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    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
    int   main(int ac, char **av) 
    { 
       plateau go; 
       gomotree   tree; 
     
       go.print_goban(); 
       tree.put_first_stone(); // premieremodification de la map 
       cout <<"please play :"; 
       cin >> o; 
       tree.goban[o] = 2;    // seconde modification de la map 
       go.print_goban();      // la modification n apparait pas 
       tree.print_goban();    // la modification apparait 
       cin>>i; 
       return (0); 
    }
    Dans le code si dessus il y a 2 map... un map dans l'objet go, et un autre dans l'objet tree.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tree.put_first_stone();
    Ca tu dis que ca modifie un map, ca modifie l'objet tree, pas l'objet go
    La tu dis que ça modifie encore un map, ça modifie une fois de plus l'objet tree seulement.
    La tu dis qu'il n'y a pas de modification, c'est normal cet objet son map n'a jamais été modifié !!!
    La tu dis que ça l'a modifié, c'est normal....
    Je ne vois pas où est ton problème, le comportement de ton code est normale !!
    Pour que tes objets go et tree aient un map commun tu dois mettre le map en static dans ta class mere.
    Ainsi tous les objets du type de ta class mere, auront en commun ce map.
    Ainsi le code que tu nous a montré au dessus modifiera qu'un seul map, car il n'y aura qu'un map. (qui sera partagé par l'objet go et l'objet tree...)
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  13. #13
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 180
    Points : 86
    Points
    86
    Par défaut
    je pense que son probleme est que dans la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tree.put_first_stone();
    en fait il fait appelle a la fonction put_first_stone():
    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
    void   gomotree::put_first_stone() 
    { 
       unsigned int   seed; 
       int ran; 
       time_t timestamp; 
       struct tm t; 
     
       timestamp = time (NULL); 
       gmtime_s(&t, &timestamp); 
       seed = t.tm_sec * t.tm_min * t.tm_hour * t.tm_year; 
       srand(seed); 
       ran = rand() % (GOBAN); 
       goban[ran-1] = 1; 
       print_goban(); 
    }
    dans la ligne:
    il change la map de l objet qui appelle la fonction qui est tree!!!


    sur ca il demande, pourquoi la map de tree n a pas ete modifiee???

  14. #14
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 180
    Points : 86
    Points
    86
    Par défaut
    t a essaye le debugger??

  15. #15
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Citation Envoyé par d-a-v-e
    il change la map de l objet qui appelle la fonction qui est tree!!!


    sur ca il demande, pourquoi la map de tree n a pas ete modifiee???
    Je ne comprends pas ce que tu voulais dire ?!
    Sa methode est acceptable, goban, c'est un map qui fait partie de la class gomotree (car elle dérive de la class plateau qui contient ce map)
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  16. #16
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Soit la class suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Mere
    {
        public :
            std::map<int, int> MyMap;
        protected :
        private :
    };
    et la class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Fille : public Mere
    {
        public :
            virtual void AddInMap(int, int);
        protected :
        private :
    };
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void Fille::AddInMap(int Key, int Value)
    {
        this->MyMap[Key] = Value;
    }
    Si on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Fille Fille_1;
    Fille_1.AddInMap(10, 10);    // On ajoute au map de la class fille un élément
    Fille_1.MyMap[11] = 10,      // La aussi
    Mere Mere_1;
    Mere_1.MyMap[1]  = 10;     // La on ne touche pas au map de Fille_1
    //_____ En revanche
    Si on déclare Mere ainsi, sans changer la class fille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Mere
    {
        public :
            static std::map<int, int> MyMap;
        protected :
        private :
    };
    La le map est partagé entre toutes les class de type mere (les Fille sont des Mere avant tout {enfin pas dans la réalité })
    Ce qui veut dire que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Fille Fille_1;
    Fille_1.AddInMap(10, 10);    // On ajoute au map de la class fille un élément
    Fille_1.MyMap[11] = 10,      // La aussi
    Mere Mere_1;
    Mere_1.MyMap[1]  = 10;     // La on ajoute aussi un élément au même map
    // Ca veut dire que
    Mere Mere_2;
    int i = 0;
    i = Mere_2.MyMap[1];         // Eh ben la i vaudra 10
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  17. #17
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 180
    Points : 86
    Points
    86
    Par défaut
    je ne vois pas ou est le probleme??

    Rafy a bien repondu!!

    les 2 appelles pour modifier map sont fait sur l objet tree!!!

    donc go.print()

    ki affiche la map de go qui n a pas ete modifier...

Discussions similaires

  1. Accès aux propriétés d'une classe mère
    Par provbxaxa dans le forum C#
    Réponses: 2
    Dernier message: 02/03/2015, 19h51
  2. Réponses: 2
    Dernier message: 03/06/2009, 15h56
  3. Problème d'accés aux attributs de ma classe
    Par Invité dans le forum Débuter
    Réponses: 3
    Dernier message: 08/07/2008, 22h49
  4. Problème d'accès aux méthodes d'une classe
    Par RR instinct dans le forum Langage
    Réponses: 5
    Dernier message: 26/06/2006, 14h51
  5. [TOMCAT] JSP problème d'accès aux méthodes d'une classes
    Par gunnm dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 22/05/2004, 14h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo