[C++] Question de débutant et solution simple

Question de débutant et solution simple [C++] - C++ - Programmation

Marsh Posté le 19-11-2006 à 13:28:53    

Bonjour,
 
je suis débutant en programmation c++. Le c ca va mais pas le c++. Je dois faire dans le cadre de mes études un programme et je débute ici avec l'encodage de pièce dont les infos sont contenues dans une classe. Je voudrais pouvoir ensuite les afficher à l'écran mais je cale par rapport au valeur de retour à donner.
 
Je vous joins le code ce sera plus parlant. Si quelqu'un pouvait m'indiquer quel paramètre donner à ma fonction encodage pour que ma fonction affiche fonctionne correctement.
 
Merci d'avance :)
 
fichier main
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. #include "PieceMusee.h"
  4. int main ()
  5. {
  6.         int value=0;
  7.         class PieceMusee pPiece;
  8.         do
  9.         {
  10.                 printf("\033[2J" );
  11.                 system ("clear" );
  12.                 cout << "\n\n\n";
  13.                 cout << "\n\n\t\t\t\t\t1- REDIGER MESSAGE";
  14.                 cout << "\n\n\t\t\t\t\t2- LIRE MESSAGE";
  15.                 cout << "\n\n\t\t\t\t\t3- RELEVER MESSAGE";
  16.                 cout << "\n\n\t\t\t\t\t4- ENVOYER MESSAGE";
  17.                 cout << "\n\n\t\t\t\t\t5- ENCODER UNE ADRESSE E-MAIL";
  18.                 cout << "\n\n\t\t\t\t\t0- EXIT";
  19.                 cout << "\n\n\t\t\t\t\tVOTRE CHOIX : ";
  20.                 cin >> value;
  21.                 switch (value)
  22.                 {
  23.                         case 1: pPiece.EncodePiece();
  24.                                 break;
  25.                         case 2: pPiece.AffichePiece();
  26.                                 break;
  27.                         case 3:
  28.                                 break;
  29.                         case 4:
  30.                                 break;
  31.                         case 5:
  32.                                 break;
  33.                         default: break;
  34.                 }
  35.         }
  36.         while (value!=0);
  37. }


 
fichier PieceMusee.cpp
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. #include "PieceMusee.h"
  4. PieceMusee::PieceMusee (void)
  5. {
  6.         identifiant = "aucun";
  7.         categorie = "aucun";
  8.         description = "aucun";
  9.         dateentree = "aucun";
  10.         estimation = 0;
  11.         expose = 0;
  12.         prete = 0;
  13. }
  14. PieceMusee::PieceMusee(string id, string cat, string descript, string dat, double est, bool exp, bool pre)
  15. {
  16.         identifiant = id;
  17.         categorie = cat;
  18.         description = descript;
  19.         dateentree = dat;
  20.         estimation = est;
  21.         expose = exp;
  22.         prete = pre;
  23. }
  24. PieceMusee::PieceMusee(PieceMusee& Piece)
  25. {
  26.         identifiant = Piece.identifiant;
  27.         categorie = Piece.categorie;
  28.         description = Piece.description;
  29.         dateentree = Piece.dateentree;
  30.         estimation = Piece.estimation;
  31.         expose = Piece.expose;
  32.         prete = Piece.prete;
  33. }
  34. PieceMusee::~PieceMusee ()
  35. {
  36.         /*if (identifiant)
  37.         {
  38.                 delete identifiant;
  39.         }
  40.         if (categorie)
  41.         {
  42.                 delete categorie;
  43.         }
  44.         if (description)
  45.         {
  46.                 delete description;
  47.         }
  48.         if (dateentree)
  49.         {
  50.                 delete dateentree;
  51.         }
  52.         if (estimation)
  53.         {
  54.                 delete estimation;
  55.         }
  56.         if (expose)
  57.         {
  58.                 delete expose;
  59.         }
  60.         if (prete)
  61.         {
  62.                 delete prete;
  63.         }*/
  64. }
  65. //  ==================================
  66. // | METHODE POUR AFFICHER UNE PIECE  |
  67. //  ==================================
  68. void PieceMusee::AffichePiece()
  69. {
  70.         class PieceMusee *pPiece;
  71.         printf("\033[2J" );
  72.         cout << "\n\t\t\t\tIDENTIFIANT : " << pPiece->identifiant;
  73.         cout << "\n\t\t\t\tCATEGORIE : " << pPiece->categorie;
  74.         cout << "\n\t\t\t\tDESCRIPTION : " << pPiece->description;
  75.         cout << "\n\t\t\t\tDATE ENTREE : " << pPiece->dateentree;
  76.         cout << "\n\t\t\t\tESTIMATION : " << pPiece->estimation;
  77.         cout << "\n\t\t\t\tEXPOSE : " << pPiece->expose;
  78.         cout << "\n\t\t\t\tPRETE : " << pPiece->prete;
  79. //        sleep (2);
  80. }
  81. //  ================================
  82. // | METHODE POUR SAISIR UNE PIECE  |
  83. //  ================================
  84. void PieceMusee::EncodePiece()
  85. {
  86.         // --------------------------------------
  87.         // Allocation dynamique d'un nouvel objet
  88.         // --------------------------------------
  89.         class PieceMusee * pPiece;
  90.         pPiece=new PieceMusee;
  91.         // ---------------------
  92.         // Effacement de l'écran
  93.         // ---------------------
  94.         printf("\033[2J" );
  95.         // ------------------
  96.         // Entrée des données
  97.         // ------------------
  98.         cout << "\n\t\t\t\tIDENTIFIANT : " << endl;
  99.         cin >> pPiece->identifiant;
  100.         cout << "\n\t\t\t\tCATEGORIE : " << endl;
  101.         cin >> pPiece->categorie;
  102.         cout <<"\n\tSAISIE: " << pPiece->categorie << endl;
  103.         cout << "\n\t\t\t\tDESCRIPTION :" << endl;
  104.         cin >> pPiece->description;
  105.         cout << "\n\t\t\t\tDATE ENTREE : " << endl;
  106.         cin >> pPiece->dateentree;
  107.         cout << "\n\t\t\t\tESTIMATION : " << endl;
  108.         cin >> pPiece->estimation;
  109.         cout << "\n\t\t\t\tEXPOSE : " << endl;
  110.         cin >> pPiece->expose;
  111.         cout << "\n\t\t\t\tPRETE : " << endl;
  112.         cin >> pPiece->prete;
  113.         return pPiece();
  114. }


 
fichier PieceMusee.h
 

Code :
  1. //****************************************************//
  2. //                CLASSE PIECEMUSEE                   //
  3. //               SIMONIS ARNAUD 2229                  //
  4. //****************************************************//
  5. #include <iostream>
  6. class PieceMusee
  7. {
  8.         public :
  9.                         string identifiant;
  10.                         string categorie;
  11.                         string description;
  12.                         string dateentree;
  13.                         double estimation;
  14.                         bool expose;
  15.                         bool prete;
  16.                         //constructeur par defaut
  17.                         PieceMusee(void);
  18.                         PieceMusee(string id, string cat, string descript, string dat, double est, bool exp, bool pre);
  19.                         PieceMusee(PieceMusee& Piece);
  20.                         ~PieceMusee ();
  21.                         void EncodePiece();
  22.                         void AffichePiece();
  23. };


 
merci encore pour votre aide  :jap:

Reply

Marsh Posté le 19-11-2006 à 13:28:53   

Reply

Marsh Posté le 19-11-2006 à 14:03:47    

et ou est le problème concraitement?  
retourner un void à ta méthode AffichePièce() ne pose pas de problème...  
 
Par contre, ce qui m'embète vraiment dans ton code, c'est que tous est en public... pas bien... pas besoin de faire une classe dans ce cas la...
 
toutes les variables doivent être en "private" et tous le reste en "public" sinon ça me semble bon...
 
De plus, normalement, on créer des assesseurs pour accéder aux variables membres privées (GET/SET) pour pour setter ou getter les valeurs depuis l'extérieur...  
 
Enfin voila déjà pas mal de remarque qui vont te permettre d'avoir une classe digne de ce nom...  
 
Autre gros problème  
class PieceMusee * pPiece;        
pPiece=new PieceMusee;
 
Tu es dingue ou quoi?
 
Tu n'as pas compris la notion d'objet à mon avis.  
Je t'explique, tu as foutu ça dans ton constructeur. Donc dans ton objet PieceMusee, tu créer un nouvel objet qui PieceMusee. Pour accéder à l'objet courant, rien ne vaux le THIS
 
 
 
PS: tu ne ferais pas tes études à l'inpres par hasard?


Message édité par moi23372 le 19-11-2006 à 14:23:54
Reply

Marsh Posté le 19-11-2006 à 14:49:38    

merci pour les réponses,
 
si je fais mes études à l'inpres et toi???
 
Pour les variables publiques je sais bien mais je mettrai tout cela en private par après je ne fais que débuter ici. Je souhaite simplement pouvoir encoder mes pièces et pour les relires après même si je vais balancer ca sur fichier après.
 
Je vais un peu voir ce que tu m'as indiqué mais je suis une daube en c++ mais faut dire que je déteste la programmation et surtout le c++.
 
Merci de me dire quoi :)


Message édité par nolimites le 19-11-2006 à 17:20:53
Reply

Marsh Posté le 19-11-2006 à 18:40:08    

moi j'ai fais mes études à l'inpres, suis sorti l'an passé...  
 
Comment ça se fait que tu fais des études d'informatique si tu détestes la programmation, ce n'est pas vraiment compatible.  
 
De plus, sache que le C++ n'est qu'une base pour les autres languages tel que C# (.NET) et JAVA par exemple. Donc si sincèrement tu veux continuer la dedans, essaye de bien comprendre les bases du C++ (la programmation OO en général) qui te seront indispensables pour accéder à d'autres languages bien plus intéressant que le CPP

Reply

Marsh Posté le 19-11-2006 à 18:46:28    

ben moi je voulais faire du réseau et la ya trop de prog.
 
On est de la mm année mais je suis doublant donc vala et je te connais bien de nom ;)
 
Ben le pire c que java et c# ca va ;)
 
Mais moi je veux du cisco et reseau :)

Reply

Marsh Posté le 19-11-2006 à 19:33:18    

oui mais dans ce métier faut savoir faire un peu de tout...  
 
ça me rassure si java et c# ça te vas. Essaye de tenir le coup en C++ alors, après tout une fois les bases aquises de la POO, tu peux aller partout...  
 
Bonne continuation

Reply

Marsh Posté le 07-12-2006 à 15:31:12    

c bizarre tes mix entre printf et cout
pareil entre \n et endl
à trop mélanger le C et le C++, ça finit en joyeux bordel.
Essaie aussi de fournir un code plus propre au début plutôt que de dire "je changerais plus tard" parceque plus tard, tu ne le feras pas ou mal. Surtout le jour où tu manipulera de centaines voir des milliers de lignes. Les centaines de lignes ça arrive plus vite qu'on le croit.
Je ne vois pas non plus le problème avec ta valeur de retour. Il est normal qu'elle soit void pour une méthode d'affichage.
 
Bon courage

Reply

Marsh Posté le 07-12-2006 à 23:29:26    

mmh, si je comprends bien tu cherches à faire un catalogue de 'pieces de collections' presente dans un musée.
 
Ta démarche n'est pas correcte, tu as un objet "piece de musée" auquel tu demandes:
- initialiste ton état
- affiche toi
- reprends les valeurs d'une autre piece
- CREER UNE PIECE
 
on ne demande pas a une piece de creer une autre piece. Tu as besoin d'une fonction statique indépendante pour faire ca. Ca s'appelle une methode de classe. (static function()). Donc ton header doit etre:
 

Code :
  1. #ifndef __PIECEMUSEE_H__
  2. #define __PIECEMUSEE_H__
  3. #include <iostream>
  4. /**
  5. * Une classe representant une piece de musee
  6. */
  7. class PieceMusee {
  8. private:
  9.                        string identifiant;
  10.                        string categorie;
  11.                        string description;
  12.                        string dateentree;
  13.                        double estimation;
  14.                        bool expose;
  15.                        bool prete;
  16.        public :
  17.                        //constructeur par defaut
  18.                        PieceMusee();
  19.                        PieceMusee(string id, string cat, string descript, string dat, double est, bool exp, bool pre);
  20.                        PieceMusee(const PieceMusee& Piece);
  21.                        virtual ~PieceMusee();
  22.                        static PieceMusee* EncodePiece();
  23.                        void AffichePiece();
  24. }
  25. #endif


 
j'ai mis virtual devant le destructeur, si ca t'échappe c'est pas grave (c'est pour resoudre des problemes de cast de classe dérivées).
 
J'ai mis une fonction static. Cela veut dire que cette fonction n'est pas attachée à un objet instancié, mais à la classe globalement. C'est une fonction globale quelque part..
Tu pourras ensuite l'utiliser comme ceci:

Code :
  1. void mafonction() {
  2.   PieceMusee *p=PieceMusee::EncodePiece();
  3.   p->AffichePiece();
  4.   ...
  5.  
  6.   delete p;
  7. }


 
Pour t'aider, penses d'abord a faire ton header. Le reste vient apres. ll faut juste bien comprendre le header, d'autant que je trouve qu'en c++ séparer les 2 permet d'avoir quelque chose de plus clair qu'en java.
 
 
/nicolas
--
http://www.valdeloire-consulting.com
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed