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 :

probleme d'affichage de mes objets


Sujet :

C++

  1. #1
    Membre du Club Avatar de alexorcet
    Inscrit en
    Mai 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 86
    Points : 50
    Points
    50
    Par défaut probleme d'affichage de mes objets
    Bonjour a tous


    j'ai le probleme suivant quand je veux afficher les objet PieceMuseeArt que j'encode et je parcous à l'aide de mon itérateur, à l'affichage il m'affiche tous les parametres par defaut de la PieceMuseeArt sans qu'il prenne en considération ce que je lui ai encodé.
    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 i;
    	cout<<"combien delement voulez vous"<<endl;
    	cin>>i;
    	Personne per;
    	PieceMuseeArt p;
    	p.Encode();
    	TVecteur<PieceMuseeArt>vpm(i);
    	cout<<"fini";
    	vpm.ajout(&p);
    	vpm.affContenu();
     
     
    }
    la methode Encode
    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
     
    PieceMusee& PieceMuseeArt::Encode()
    {
    	PieceMuseeArt pmar;
     
     
         	cout<<"--------------Encodage de la piece-----------"<<endl;
     
    	Identifiant i;
    	char l;int a;
    	cout<<"Inserer la lettre de l'id alphanumerique de la piece: ";
    	cin>>l;
    	i.setLettre(l);
    	this->id.setLettre(l);
    	cout<<"Quelle est son annee d acquisition?";
    	cin>>a;
    	i.setAnnee_dacq(a);
    	this->id.setAnnee_dacq(a);
     
    	pmar.setIdentifiant(i);
     
    	cout<<"l'id avec la surcharge de <<"<<i<<endl;
    	cout<<"l'id avec surcharge de = "<<pmar.id<<endl;
    	cout<<"l'id avec toString()est: "<<i.toString(l,a)<<endl<<endl;
    	cout<<"quelle est la categorie de la piece:  ";
    	cin>>category;
    	cout<<"decrivez la piece: ";
    	cin>>description;
     
    	cout<<"Donnez une estimation en euro de la piece:";
    	cin>>valeur;
    	cout<<"quelle est sa date d'entree au musee: ";
    	cin>>dateIn;
    	setDateIn(dateIn);
          	cout<<"la piece est-elle exposee au musee O/N: "<<endl;
    	cin>>exposed;
    	cout<<"encodage de l'auteur"<<endl;
     
    	pmar.auteur->Encoder();
     
    	this->auteur->nom = pmar.auteur->nom;
    	this->auteur->prenom = pmar.auteur->prenom;
    	this->auteur->dateDeNaissance = pmar.auteur->dateDeNaissance;
     
     
    	return *this;	
    }
    j'ajoute les element dans le vecteur template avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    template <class type>
    int TVecteur<type>::ajout( type *n)
    {
    	type *pNouv = new type;
            *pNouv = *n;// l'operateur = est surchargé correctement 
    	data[nbrElem] = *pNouv;	
    	nbrElem++;
     
    	return 1;	
    }
    et j'affiche avec la methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    template <class type>
    void TVecteur<type> :: affContenu(void)
    {
    	iterTVecteur<type> it(*this);
    	while(!it.end())
    	{
    		type t((type &)it);
    		cout<<t<<endl;//surchargé dans la classe type instanciée
    		it++;
     
    	}
    pourquoi à votre avis il m'affiche les parametre par defaut?

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Pour utiliser l'operateur << avec un objet, il faut... que tu aies surchargé l'opérateur pour l'objet...
    Autrement dit, ta classe devrait se présenter sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class PieceMuseeArt
    {
        public:
            PieceMuseeArt();
            ~PieceMuseeArt();
            Encode();
       private:
           friend std::ostream& operator<<(std::ostream&, const PieceMuseeArt&);
           //liste des membre de  PieceMuseeArt
    }
    avec une implémentation du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    std::ostream& operator<<(std::ostream& ofs, const PieceMuseeArt& piece)
    {
        ofs<<"identifiant :"<<piece.identifiant<<"\n"
           <<"category :"<<piece.category<<"\n"
           <<"Date entree :"<<piece.datein<<"\n"
           <<"Auteur :"<<piece.auteur.nom<<" "<<piece.auteur.prenom<<"\n"
           <<"Valeur :"<<piece.valeur<<"\n"
           <<"Description :"<<piece.description<<std::endl;
    //pour permetttre les << en serie
        return ofs;
    }
    Evidemment, si, pour l'un des membre à afficher, l'operateur << n'a pas été surchargé (parce que c'est lui meme une classe ou une strucutre), il faudra penser à le surcharger aussi dans la classe ou la structure adequate

    C'est bizard, mais ca me fait énormément penser à ==>Ce post<== qui aurait répondu à ta question si tu avais effectué une recherche

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Points : 48
    Points
    48
    Par défaut
    Salut,

    Je crois que tu n'es pas obliger de faire une méthode ajout et affiche pour ta class TVecteur.
    Tu pourrais directement faire ceci :
    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 i;
    	cout<<"combien delement voulez vous"<<endl;
    	cin>>i;
    	Personne per;
    	PieceMuseeArt p;
    	TVecteur<PieceMuseeArt>vpm(i);
    /* A mettre dans une boucle pour pouvoir en ajouter plusieurs et 
    idem pour les afficher avant la fin du programme */ 
                 vpm[i].Encode(); /* Méthode Encode() de class PieceMuseeArt */
                 vpm[i].Affiche(); /* Méthode Affiche() de class PieceMuseeArt */
    	cout<<"fini";
     
    }
    Et comme le dit monsieur koala01, il est plus simple et surtout moins de ligne de code de surcharger les opérateurs << et >> de chaque class

  4. #4
    Membre du Club Avatar de alexorcet
    Inscrit en
    Mai 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 86
    Points : 50
    Points
    50
    Par défaut
    pour Koala: j'ai noté dans mon code que l'opérateurs "<<" est deja surchargé et il affiche correctement les objets,mais quand je passe par les templates il ne les affiche pas.


    pour dimitri
    :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TVecteur<PieceMuseeArt>vpm(i);
    /* A mettre dans une boucle pour pouvoir en ajouter plusieurs et 
    idem pour les afficher avant la fin du programme */ 
                 vpm[i].Encode(); /* Méthode Encode() de class PieceMuseeArt */
                 vpm[i].Affiche(); /* Méthode Affiche() de class PieceMuseeArt */
    	cout<<"fini";
    vpm une instance de Tvecteur et vpm[i] est un tableau je comprends pas trop?

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Ben, visiblement, c'est que tu fais une erreur quelque part...
    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
     
    class Maclasse
    {
        public:
            Maclasse(unsigned int i):index(i){};
            ~Maclasse(){};
        private:
            int index;
            friend
            std::ostream& operator<< (std::ostream& ofs,const Maclasse& ref)
            {
                ofs<<"bonjour\net au revoir a l'index "<<ref.index;
                ofs<<std::endl;
                return ofs;
            }
     
    };
    int main()
    {
        std::vector<Maclasse> tab;
        for(int i=0;i<10;i++)
            tab.push_back(Maclasse(tab.size()));
        for(int i=0;i<10;i++)
            std::cout<<tab[i];
        return 0;
    }
    ceci compile et fonctionne parfaitement... de meme que
    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
     
    class Maclasse
    {
        public:
            Maclasse(unsigned int i):index(i){};
            ~Maclasse(){};
            void Affiche()
            {
                std::cout<<(*this);
            }
        private:
            int index;
            friend
            std::ostream& operator<< (std::ostream& ofs,const Maclasse& ref)
            {
                ofs<<"bonjour\net au revoir a l'index "<<ref.index;
                ofs<<std::endl;
                return ofs;
            }
    };
    int main()
    {
        std::vector<Maclasse> tab;
        for(int i=0;i<10;i++)
            tab.push_back(Maclasse(tab.size()));
        for(int i=0;i<10;i++)
            tab[i].Affiche();
        return 0;
    }
    si tu tiens à utiliser une methode "Affiche()"...
    NOTA: Par flegme, j'ai tout mis dans un seul fichier "main.cpp", mais tu peux (et c'est d'ailleurs préférable) créer une arborescence cohérente (avec entete et implementation )

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Points : 48
    Points
    48
    Par défaut
    Lorsque tu écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TVecteur<PieceMuseeArt>vpm(n);
    Cela crée un vecteur de n cases ou tu peus y "rangé" des objets PieceMuseeArt.
    Pour écrire
    Il faut surcharger l'opérateur [] ,pour l'instance de TVecteur, qui va te renvoyer ta variable membre *data qui est en faite un pointeur sur le vecteur PieceMuseeArt ainsi créé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    T& operator[] (int i){return *(data+i);}
    Ce qui est encore mieux c'est que tu peus ajouter des méthodes pour ta class TVecteur que tu pourras alors appeler normalement avec l'instance de TVecteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vpm.PlaceOccupe();
    Je ne suis pas à fond dans la théorie donc je sais pas vraiment t'expliquer le pourquoi du comment

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Probleme Java3d] Probleme d'affichage d'un objet 3D .obj
    Par Djinner² dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 04/01/2010, 17h55
  2. Pb d'affichage de mes objets
    Par sorcer1 dans le forum Sécurité
    Réponses: 7
    Dernier message: 17/02/2009, 17h55
  3. Réponses: 2
    Dernier message: 28/06/2008, 10h08
  4. Probleme d'affichage de mes pages web ,j'aperçois un leger clignotement en IE
    Par babouba dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/07/2007, 21h27
  5. Réponses: 7
    Dernier message: 28/10/2006, 19h07

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