classes en c++ - C++ - Programmation
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
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;
}
Marsh Posté le 30-09-2016 à 23:36:05
Code :
|
Et le destructeur par défaut convient ici.
A+,
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
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+,
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;
}
}
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
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
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*)'|
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+,
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 ??
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.
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 *
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
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!)...
Marsh Posté le 01-10-2016 à 22:23:09
Code :
|
Marsh Posté le 01-10-2016 à 22:24:47
Code :
|
Marsh Posté le 01-10-2016 à 22:25:56
je voudrais initialiser dateinscription
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 :
|
Pourquoi tu redéclares une variable DateInscription ?
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 ?
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...
Marsh Posté le 16-10-2016 à 23:41:15
stupidduck a écrit : HEPL Seraing POWAAAAAAAAAAA ! ;-) |
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.