classes en c++

classes en c++ - C++ - Programmation

Marsh Posté le 30-09-2016 à 16:23:29    

Bonjour je dois faire cet exo mais j'ai un problème pour les char et je voudrais savoir si mon code est correct merci
a) La classe Matricule (Essai1())  
Il s’agit à présent de créer une classe permettant d’identifier de manière unique un joueur au niveau de la fédération. On vous demande de créer la classe Matricule contenant  
 Une variable numero de type int qui identifie de manière unique un joueur auprès de la fédération.  Une variable dateInscription de type char[11] (chaine de caractères de taille fixe) qui contient la date d’inscription du joueur sous la forme « XX/XX/XXXX ». Exemple : « 25/09/2016 ».  Un constructeur par défaut, un de copie et un d’initialisation (voir jeu de tests), ainsi qu’un destructeur (dans la suite, nous n’en parlerons plus  toute classe digne de ce nom doit au moins contenir un constructeur par défaut et un de copie, ainsi qu’un destructeur).  Les méthodes getXXX()/setXXX() associées,  Une méthode Affiche() permettant d’afficher les caractéristiques d’un matricule.

Reply

Marsh Posté le 30-09-2016 à 16:23:29   

Reply

Marsh Posté le 30-09-2016 à 16:24:26    

#ifndef MATRICULE_H_INCLUDED
#define MATRICULE_H_INCLUDED
class Matricule
{
 
    private:
    int numero;
    char dateInscription[11];
 
 
    public :
    // Constructor
    Matricule();
    Matricule(const char no, int i);
    Matricule(const Matricule& m);
    ~Matricule();
    // Methods
     int setNumMatricule(int n);
     int getNumMatricule();
     void setdateInscription(const char no);
     char  getdateInscription();
     void Affiche();
};
 
 
 
#endif // MATRICULE_H_INCLUDED


Message édité par bjs le 30-09-2016 à 16:35:00
Reply

Marsh Posté le 30-09-2016 à 16:25:00    

using namespace std;
 
#include <string.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
 
#include "Matricule.h"
 
Matricule::Matricule()//constructeur par défaut ??
    {
        numero=0;
       dateInscription=0;
 
    }
 
    Matricule::Matricule(const char no, int i)
    {
        numero=i;
        dateInscription=no;
 
    }
 
    Matricule::Matricule(const Matricule& m)//constructeur de copie
    {
  numero=m.num;
        char dateInscription[11];
  strcpy(dateInscription,m.dateinscription);
    }
 
    Matricule::~Matricule()
    {
        delete[]dateInscription;
    }
   void Matricule::setNumMatricule(int n)
    {
        if(n>=0) numero=n;
    }
    int Matricule::getNumMatricule()
    {
        return numero;
    }
    void setdateInscription(const char no)
    {
     char dateInscription[11];
     strcpy(dateInscription,no);
    }
 
    char Matricule::getdateInscription()
    {
        return dateInscription;
    }
 
    void Matricule::Affiche()
    {
 
    cout << "Numero Matricule = " << getNumMatricule() << endl;
    cout << "Date d'inscription = " << getDateInscription() << endl;
 
    }


Message édité par bjs le 30-09-2016 à 16:35:52
Reply

Marsh Posté le 30-09-2016 à 23:36:05    

Code :
  1. #include <iostream>
  2. #include <cstring>
  3. class Matricule {
  4.     private:
  5.     int numero;
  6.     char dateInscription[11];
  7.     public :
  8.     // Constructor
  9.     Matricule(const char* no = "00/00/0000", int i = 0) {
  10.         numero = i;
  11.         std::strncpy(dateInscription, no, 11);
  12.     }
  13.     Matricule(const Matricule& m) :  Matricule(m.dateInscription, m.numero) {
  14.     }
  15.     // Methods
  16.      // int setNumMatricule(int n);
  17.      // int getNumMatricule();
  18.      // void setdateInscription(const char no);
  19.      // char  getdateInscription();
  20.     void Affiche() {
  21.         std::cout << "Numero Matricule = " << numero << std::endl;
  22.         std::cout << "Date d'inscription = " << dateInscription << std::endl;
  23.     }
  24. };


Et le destructeur par défaut convient ici.
 
A+,


Message édité par gilou le 30-09-2016 à 23:45:24

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 30-09-2016 à 23:45:16    

mais je peux pas accéder aux variables privé donc je dois utiliser les setters et getters

Reply

Marsh Posté le 30-09-2016 à 23:46:41    

ou bien tu y accédes avec le constructeur de copie ??

Reply

Marsh Posté le 30-09-2016 à 23:50:16    

> mais je peux pas accéder aux variables privé donc je dois utiliser les setters et getters
 
WTF
si c'est void Matricule::Affiche(); c'est une méthode de ton objet qui accède donc aux variables de ton objet, privées ou pas.
 
Sinon, il faudrait que tu définisse une fonction hors de ta classe, comme void Affiche(Matricule m);
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 30-09-2016 à 23:53:15    

voici le main de mon exo
#include <stdlib.h>
#include <iostream>
using namespace std;
#include "Joueur.h"
#include "Matricule.h"
#include "Classement.h"
#include<string.h>
 
int  Menu();
void Essai1();
void Essai2();
void Essai3();
void Essai4();
 
int main(int argc,char* argv[])
{
  int choix;
  bool fini = false;
 
  while(!fini)
  {
    if (argc == 2) { choix = atoi(argv[1]); fini = true; }
    else choix = Menu();
    switch(choix)
    {
      case 1 : Essai1(); break;
      case 2 : Essai2(); break;
      case 3 : Essai3(); break;
      case 4 : Essai4(); break;
      default : fini = true ; break;
    }
  }
 
  return 0;
}
 
//*******************************************************************************************************
int Menu()
{
  cout << endl;
  cout << "--------------------------------------------------------------------------------------" << endl;
  cout << "--- JEU DE TESTS 2 -------------------------------------------------------------------" << endl;
  cout << "--------------------------------------------------------------------------------------" << endl;
  cout << " 1. Tests de la classe Matricule" << endl;
  cout << " 2. Tests de la classe Classement" << endl;
  cout << " 3. Tests de la classe Joueur (avec agregations par valeur et par reference)" << endl;
  cout << " 4. Tests des variables statiques utiles" << endl;
  cout << " 5. Quitter" << endl << endl;
 
  int ch;
  cout << "  Choix : ";
  cin >> ch; // Faites pas le biess !
  return ch;
}
 
//*******************************************************************************************************
//*** Tests de la classe Matricule **********************************************************************
//*******************************************************************************************************
void Essai1()
{
  cout << "(1) ***** Test des constructeurs de Matricule *****" << endl;
  {
    Matricule m1, m2("01/09/2016",25369), m3(m2);
    cout << "Defaut : "; m1.Affiche();
    cout << "Initialisation : "; m2.Affiche();
    cout << "Copie : "; m3.Affiche();
    cout << endl;
  }
 
  cout << endl << "(2) **** Test des setters/getters *****" << endl;
  {
    Matricule m;
    cout << "Defaut : "; m.Affiche();
    m.setDateInscription("15/10/2012" );
    m.setNumero(14817);
    cout << "Apres setters : "; m.Affiche();
   // cout << endl << "Date inscription : " << m.getDateInscription() << endl;
    cout << "Numero : " << m.getNumero() << endl;
  }
}

Reply

Marsh Posté le 30-09-2016 à 23:54:13    

je suis au tout début en c++ donc je comprends pas trop bien tout mais bon j'essaye

Reply

Marsh Posté le 30-09-2016 à 23:55:03    

j'ai un main.cpp un matricule.h et un matricule.cpp

Reply

Marsh Posté le 30-09-2016 à 23:55:03   

Reply

Marsh Posté le 01-10-2016 à 00:09:31    

j'ai un problème quand je compile y a pas d'erreurs mais ça met
 
cant create no such file or directory


Message édité par bjs le 01-10-2016 à 00:48:50
Reply

Marsh Posté le 01-10-2016 à 00:19:42    

voici le matricule.cpp
using namespace std;
 
#include <string.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
 
#include "Matricule.h"
 
Matricule::Matricule()//constructeur par défaut ??
    {
        Numero=0;
      char DateInscription[11]="00/00/0000";
 
    }
 
    Matricule:: Matricule(const char* no = "00/00/0000", int i = 0)
     {
        Numero = i;
        strncpy(DateInscription, no, 11);
     }
 
    Matricule::Matricule(const Matricule& m)//constructeur de copie
    {
  Numero=m.Numero;
        char DateInscription[11];
  strcpy(DateInscription,m.DateInscription);
    }
 
    Matricule::~Matricule()
    {
 
    }
  void Matricule::setNumero(int n)
    {
        if(n>=0) Numero=n;
    }
    int Matricule::getNumero()
    {
        return Numero;
    }
    void setDateInscription(const char *no)
    {
        char DateInscription[11];
     strcpy(DateInscription,no);
    }
 
     char* Matricule::getDateInscription()
    {
        return DateInscription;
    }
 
    void Matricule::Affiche()
    {
 
    cout << "Numero Matricule = " << getNumero() << endl;
    cout << "Date d'inscription = " << getDateInscription() << endl;
 
    }
 
voici le matricule.h
#ifndef MATRICULE_H_INCLUDED
#define MATRICULE_H_INCLUDED
class Matricule
{
 
    private:
    int Numero;
    char DateInscription[11];
 
 
    public :
    // Constructor
    Matricule();
    Matricule( const char* no, int i);
    Matricule( const Matricule& m);
    ~Matricule();
    // Methods
    void setNumero(int n);
    int getNumero();
     void setDateInscription( const char* no);
     char* getDateInscription();
     void Affiche();
};
 
 
 
#endif // MATRICULE_H_INCLUDED
 
 
 ça met cant create no such file or directory et j'ai décoché l'option debug et j'ai mis release et ça compile et y a plus no such file.....  
il met un message d'erreur:
je comprends pas ce message d'erreur
obj\Release\..\C++\eXTEST2\main.o:main.cpp|| undefined reference to `Matricule::setDateInscription(char const*)'|


Message édité par bjs le 01-10-2016 à 01:56:16
Reply

Marsh Posté le 01-10-2016 à 11:49:07    

#include <string.h>
#include <stdio.h>
#include <stdlib.h>  
 
On pourrait savoir ce que des includes C viennent faire dans du code C++?
Si c'est ton prof qui t'apprends à programmer ainsi, changes de prof.
Les includes de la librairie standard C++ n'ont pas de .h, même ceux utilisés pour la compatibilité comme cstring.
 
A+,


Message édité par gilou le 01-10-2016 à 11:49:49

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 01-10-2016 à 13:16:35    

non ç'est moi qui les a mis j'ai fait une erreur mais le reste marche alors si j'enlève les include ??

Reply

Marsh Posté le 01-10-2016 à 13:22:13    

je suis en haute école en deuxième donc j'ai pas le choix faut bien que je fais des erreurs pour apprendre on est au début de l'année.

Reply

Marsh Posté le 01-10-2016 à 13:29:09    

j'ai un autre problme dans l'énoncé la dateinscription est un char [11]et moi j'ai mis un char *

Reply

Marsh Posté le 01-10-2016 à 13:58:54    

j'ai compilé ça marche à peu près bien sauf pour l'affichage qui n'est pas exactement comme demandé dans le main mais j'ai toujours un problème que la date d'inscription qui marche pas

Reply

Marsh Posté le 01-10-2016 à 21:25:15    

bjs a écrit :

j'ai compilé ça marche à peu près bien sauf pour l'affichage qui n'est pas exactement comme demandé dans le main mais j'ai toujours un problème que la date d'inscription qui marche pas


Evidement, tu la copie dans une variable temporaire... Même problème dans ton constructeur par defaut,  ton constructeur par copie et ton setDateInscription( que tu as mal définie - relis toi serieusement!)...


---------------
Seul Google le sait...
Reply

Marsh Posté le 01-10-2016 à 22:23:09    

Code :
  1. using namespace std;
  2. #include <string.h>
  3. #include <iostream>
  4. #include<ctype.h>
  5. #include "Matricule.h"
  6. Matricule::Matricule()//constructeur par défaut ??
  7.     {
  8.         Numero=0;
  9.         const char*no="00/00/0000";
  10.         strncpy(DateInscription,no,11);
  11.     }
  12.     Matricule:: Matricule(const char* no , int i)
  13.      {
  14.         strncpy(DateInscription, no,11);
  15.         Numero = i;
  16.      }
  17.     Matricule::Matricule(const Matricule& m)//constructeur de copie
  18.     {
  19.  Numero=m.Numero;
  20.         strcpy(DateInscription,m.DateInscription);
  21.     }
  22.     Matricule::~Matricule()
  23.     {
  24.     }
  25.   void Matricule::setNumero(int n)
  26.     {
  27.         if(n>=0) Numero=n;
  28.     }
  29.     int Matricule::getNumero()
  30.     {
  31.         return Numero;
  32.     }
  33.     void Matricule::setDateInscription(const char*no)
  34.     {
  35.    strncpy(DateInscription, no,11);
  36.     }
  37.      char* Matricule::getDateInscription()
  38.     {
  39.         return DateInscription;
  40.     }
  41.     void Matricule::Affiche()
  42.     {
  43.     cout << "Numero Matricule = " << getNumero() << endl;
  44.     cout << "Date d'inscription = " << getDateInscription() << endl;
  45.     }


Message édité par bjs le 02-10-2016 à 23:19:16
Reply

Marsh Posté le 01-10-2016 à 22:24:47    

Code :
  1. #ifndef MATRICULE_H_INCLUDED
  2. #define MATRICULE_H_INCLUDED
  3. class Matricule
  4. {
  5.     private:
  6.     int Numero;
  7.     char DateInscription[11];
  8.     public :
  9.     // Constructor
  10.     Matricule();
  11.     Matricule( const char* no, int i);
  12.     Matricule( const Matricule& m);
  13.     ~Matricule();
  14.     // Methods
  15.     void setNumero(int n);
  16.     int getNumero();
  17.     void setDateInscription(const char*no);
  18.     char* getDateInscription();
  19.     void Affiche();
  20. };
  21. #endif // MATRICULE_H_INCLUDED


Message édité par bjs le 01-10-2016 à 23:07:59
Reply

Marsh Posté le 01-10-2016 à 22:25:56    

je voudrais initialiser dateinscription


Message édité par bjs le 01-10-2016 à 22:38:28
Reply

Marsh Posté le 01-10-2016 à 22:30:26    

Utilise déjà les balises code pour poster ton code, c'est pénible là!  
Et t'es pas sur un chat, donc pas de double/triple post! Quand tu veux rajouter quelque chose, si personne n'as posté après toi, tu édites ton dernier message s'il te plaît!

Code :
  1. Matricule::Matricule()//constructeur par défaut ??
  2.     {
  3.         Numero=0;
  4.       char DateInscription[11];
  5.     }


Pourquoi tu redéclares une variable DateInscription ?


---------------
Seul Google le sait...
Reply

Marsh Posté le 01-10-2016 à 22:46:48    

j'ai corrigé mes erreurs je pense et j'ai essayé de compiler y a aucune erreur et tout marche bien avec le main qui était donné par le prof
j'ai édité dans mes messages precedents et j'ai mis les balises code et j'ai corrigé mes erreurs
tu peux regarder et me dire si ç'est bon stp ?


Message édité par bjs le 01-10-2016 à 23:10:20
Reply

Marsh Posté le 02-10-2016 à 14:52:10    

Merci de me dire si le code est correct maintenant svp

Reply

Marsh Posté le 03-10-2016 à 12:55:40    

C'est mieux.
quelques remarques:
- Using namerspace std n'est pas une habitude à prendre.
- en c++, c'est #include <cstring> et pas <string.h>
- dans ton constructeur de copie, tu utilise strcpy au lieu de strncpy (que tu utilises partout ailleurs)
- Plutôt que de définir tes constructeurs séparément, tu aurais pu t'inspirer de ce que t'as montrer gilou dans son premier post, en jouant sur les paramètres par défaut...


Message édité par breizhbugs le 03-10-2016 à 12:56:32

---------------
Seul Google le sait...
Reply

Marsh Posté le 16-10-2016 à 23:41:15    

stupidduck a écrit :

HEPL Seraing POWAAAAAAAAAAA ! ;-)
 
bjs => t'exagère là, suffit d'écouter un minimum au cours, les questions que tu posent ont une réponse dans les premières pages du syllabus...



Message édité par bjs le 17-10-2016 à 15:10:58
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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