#1 Le 25/07/2007, à 18:56
- djjudge
[C++] classe, objet... debutant inside !
Bonjour,
pour m'entraîner avec la POO, je voudrais programmer une "médiathèque".
j'ai crée une classe media et une classe personne (dans des fichiers séparés )
class Media
{
public: // méthodes
Media(std::string nom, long type, bool disponible); // constructeur
bool estDispo();
void modifierDisponibilite();
Media acquerirMedia();
// procedures d'affichage
void afficherNomMedia();
void afficherTypeMedia();
void afficherDispo();
void afficherEtat();
private: // attributs
std::string m_nomMedia;
long m_typeMedia;
bool m_disponible;
};
class Personne
{
public:
private:
std::string m_nom;
std::string m_prenom;
long m_age;
double m_telephone;
std::string m_adresse;
std::string m_mail;
};
Je voudrais acquerir (à la console) un media mais je ne sais pas comment faire. pour info, voici ma fonction acquerir:
Media Media::acquerirMedia()
{
string nom;
long type;
bool disponible;
cout<<"Nom du media: "; cin>> nom;
cout<<"Type: "; cin>>type;
cout<<"Disponibilite: "; cin>> disponible;
Media M(nom,type,disponible);
return M;
}
Ensuite, je voudrais utiliser les listes chaînées (avoir une liste chaînée de media), enregistrer mes données dans un fichier (je ne sais pas faire avec des classes) mais la aussi je galère...
Merci d'avance pour votre aide !
Dernière modification par djjudge (Le 26/07/2007, à 18:15)
Hors ligne
#2 Le 25/07/2007, à 21:31
- obiwankennedy
Re : [C++] classe, objet... debutant inside !
Peux-tu expliquer ce qui ne va pas ?
On ne sais pas comment t'aider là.
Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam
Hors ligne
#3 Le 25/07/2007, à 22:05
- djjudge
Re : [C++] classe, objet... debutant inside !
Tout d'abord, merci pour ta réponse!
Je souhaite enregistrer un media en ligne de commande (fonction à priori basique). Je sais le faire en définissant une structure mais avec une classe je ne sais pas... et ceci est du aux constructeurs je crois.
je souhaiterais faire quelque chose comme ça (comme si je faisais avec un structure ) :
Media M = acquerirMedia();
Mais avec les classes, ce n'est pas possible...
Pourtant ça ne doit pas être bien sorcier créer un objet à l'aide d'un constructeur dans lequel on rentre ce que l'on a tapé au clavier:
Media M(nom,type,disponible);
j'espère avoir été plus explicite
Hors ligne
#4 Le 25/07/2007, à 22:46
- obiwankennedy
Re : [C++] classe, objet... debutant inside !
Je pense avoir compris. Voilà ce que je te conseille pour débuter.
//media.h
class Media
{
public: // méthodes
Media(std::string nom, long type, bool disponible); // constructeur
Media(); //constructeur par defaut
bool estDispo();
void modifierDisponibilite();
// procedures d'affichage
void afficherNomMedia();
void afficherTypeMedia();
void afficherDispo();
void afficherEtat();
private: // attributs
std::string m_nomMedia;
long m_typeMedia;
bool m_disponible;
};
//Media.cpp
Media::Media()
{
int disponible;
cout<<"Nom du media: "; cin>> m_nom;
cout<<"Type: "; cin>>m_type;
cout<<"Disponibilite: "; cin>> disponible;
if(disponible==1)//je suis pas sur que l'ont puisse saisir un booléen donc je fais saisir
//un entier
m_disponible=true;
else
m_disponible=false;
}
en faite, en gros, tu demandes à l'objet de se créer lui même alors qu'il n'existe pas.
Par ma méthode, je crée un objet par le constructeur par défaut, c'est le constructeur qui demande la saisie des infos.
ainsi ton objet est créé et tu as rempli ses champs.
dans le main.cpp
Media monmedia();
monmedia.afficherNomMedia();
monmedia.afficherTypeMedia();
monmedia.afficherDispo();
monmedia.afficherEtat();
si tu veux faire un truc plus propre encore tu peux faire des accesseurs à tes champs de ta classe.
Dernière modification par obiwankennedy (Le 25/07/2007, à 23:02)
Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam
Hors ligne
#5 Le 25/07/2007, à 23:05
- obiwankennedy
Re : [C++] classe, objet... debutant inside !
bon je te donne un solution simple à toi de l'améliorer.
Code de media.cpp
#include <iostream>
#include "media.h"
using namespace std;
media::media()
{
int disponible;
cout<<"Nom du media: "; cin>> m_nom;
cout<<"Type: "; cin>>m_type;
cout<<"Disponibilite: "; cin>> disponible;
if(disponible==1)
m_disponible=true;
else
m_disponible=false;
}
void media::affichage()
{
cout << m_nom << " "<< m_type << " " ;
if(m_disponible)
if(m_disponible)
cout <<"est disponible" << endl;
else
cout << "n'est pas disponible" <<endl;
}
code de media.h
#include <iostream>
#include <string.h>
using namespace std;
class media
{
string m_nom;
long m_type;
bool m_disponible;
public:
media();
void affichage();
};
code du main.cpp
#include "media.h"
int main ()
{
media monmedia;
monmedia.affichage();
}
ligne pour compiler tout celà.
g++ -Wall -c media.cpp
g++ -Wall -c main.cpp
g++ -Wall -o main main.o media.o
et pour executer "./main"
Dernière modification par obiwankennedy (Le 25/07/2007, à 23:06)
Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam
Hors ligne
#6 Le 26/07/2007, à 06:43
- djjudge
Re : [C++] classe, objet... debutant inside !
Merci pour ta réponse détaillé, ça marche !!!
Il fallait donc faire cela dans le constructeur !
merci beaucoup, je n'ai plus qu'à continuer d'avancer le tout
Dernière modification par djjudge (Le 26/07/2007, à 06:46)
Hors ligne
#7 Le 26/07/2007, à 07:32
- obiwankennedy
Re : [C++] classe, objet... debutant inside !
De rien, si tu as d'autres question n'hesite pas.
Dernière modification par obiwankennedy (Le 26/07/2007, à 07:38)
Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam
Hors ligne
#8 Le 26/07/2007, à 18:19
- djjudge
Re : [C++] classe, objet... debutant inside !
Alors j'ai réfléchi un peu aujourd'hui au sujet et je me suis dis que le meilleur moyen de gérer les emprunts, c'est de mettre ma classe personne en pointeur dans ma classe media.
// constructeur
Media::Media(string nom, long type, bool disponible):m_nom(nom), m_type(type), m_disponible(disponible)
{
m_personne = new Personne;
}
// destructeur
Media::~Media()
{
delete m_personne;
}
Maintenant, j'aimerais obtenir une liste chainée de media (mieux qu'un tableau ??) mais je ne sais pas le faire avec les classes.
Dernière modification par djjudge (Le 26/07/2007, à 19:39)
Hors ligne
#9 Le 26/07/2007, à 20:37
- obiwankennedy
Re : [C++] classe, objet... debutant inside !
Regarde du coté de la classe vector de la STL ça s'utilise comment un tableau mais sans les problèmes d'ajouts et de suppressions. c'est le must..
Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam
Hors ligne
#10 Le 26/07/2007, à 21:27
- djjudge
Re : [C++] classe, objet... debutant inside !
merci pour ton aide ! Je vais me pencher dessus alors...
Hors ligne