Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1744 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  classes en c++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

classes en c++

n°2289200
bjs
Posté le 30-09-2016 à 16:23:29  profilanswer
 

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.

mood
Publicité
Posté le 30-09-2016 à 16:23:29  profilanswer
 

n°2289201
bjs
Posté le 30-09-2016 à 16:24:26  profilanswer
 

#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
n°2289202
bjs
Posté le 30-09-2016 à 16:25:00  profilanswer
 

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
n°2289231
gilou
Modérateur
Modzilla
Posté le 30-09-2016 à 23:36:05  profilanswer
 

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é!  --
n°2289232
bjs
Posté le 30-09-2016 à 23:45:16  profilanswer
 

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

n°2289233
bjs
Posté le 30-09-2016 à 23:46:41  profilanswer
 

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

n°2289234
gilou
Modérateur
Modzilla
Posté le 30-09-2016 à 23:50:16  profilanswer
 

> 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é!  --
n°2289235
bjs
Posté le 30-09-2016 à 23:53:15  profilanswer
 

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;
  }
}

n°2289236
bjs
Posté le 30-09-2016 à 23:54:13  profilanswer
 

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

n°2289237
bjs
Posté le 30-09-2016 à 23:55:03  profilanswer
 

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

mood
Publicité
Posté le 30-09-2016 à 23:55:03  profilanswer
 

n°2289238
bjs
Posté le 01-10-2016 à 00:09:31  profilanswer
 

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
n°2289239
bjs
Posté le 01-10-2016 à 00:19:42  profilanswer
 

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
n°2289241
gilou
Modérateur
Modzilla
Posté le 01-10-2016 à 11:49:07  profilanswer
 

#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é!  --
n°2289242
bjs
Posté le 01-10-2016 à 13:16:35  profilanswer
 

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

n°2289243
bjs
Posté le 01-10-2016 à 13:22:13  profilanswer
 

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.

n°2289244
bjs
Posté le 01-10-2016 à 13:29:09  profilanswer
 

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

n°2289245
bjs
Posté le 01-10-2016 à 13:58:54  profilanswer
 

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

n°2289262
breizhbugs
Posté le 01-10-2016 à 21:25:15  profilanswer
 

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...
n°2289264
bjs
Posté le 01-10-2016 à 22:23:09  profilanswer
 

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
n°2289265
bjs
Posté le 01-10-2016 à 22:24:47  profilanswer
 

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
n°2289266
bjs
Posté le 01-10-2016 à 22:25:56  profilanswer
 

je voudrais initialiser dateinscription


Message édité par bjs le 01-10-2016 à 22:38:28
n°2289267
breizhbugs
Posté le 01-10-2016 à 22:30:26  profilanswer
 

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...
n°2289268
bjs
Posté le 01-10-2016 à 22:46:48  profilanswer
 

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
n°2289285
bjs
Posté le 02-10-2016 à 14:52:10  profilanswer
 

Merci de me dire si le code est correct maintenant svp

n°2289305
breizhbugs
Posté le 03-10-2016 à 12:55:40  profilanswer
 

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...
n°2290261
bjs
Posté le 16-10-2016 à 23:41:15  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  classes en c++

 

Sujets relatifs
Meilleure spécification du diagramme des classes[Débutant C++] Classes simples
Utiliser les classes en Java avec eclipse[C++] utiliser des classes dans mon code
Récupérer classes d'un packageDestruction d'un vecteur de classes
Chargement dynamique de classes[Java/ANT] Chercher des classes d'un type précis
[VBA] Une sombre histoire de collection de classes[JS] multiples changement de classes sur un seul onmouseover
Plus de sujets relatifs à : classes en c++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR