Les class

Résolu
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011 - 5 févr. 2008 à 01:47
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011 - 8 févr. 2008 à 17:06
bonjour voila j'ais commancer un peux a programmé avec les class.
et j'ais un problème que je n'arrive pas à résoudre.

voila le bou de code

class command
       {
       public :     
                string ligne;
                string page;
              char*   sName ;   
     
     void ouvrire()
      {
     ifstream  fichier(sName);
        } 
     
      void lire()
       {
           while ( getline( fichier, ligne )){ page=page+entre+ligne;}
cout<<page;
           }
protected:
string entre;
};

mon problème est symple  il me dis que fichier n'ais pas déclaré a la ligne "while (getline(fichier,ligne)){page=page+entre+ligne;}" .
alors je me suis dis que sais peux être a cause qui se trouve dans void ouvrire, donc je l'ais mi avant ouvrire comme ceci :
            
string page;
              char*   sName ;   
     ifstream fichier; 
     void ouvrire()
      {
     fichier(sName);
        }  
     
Et la ça marche toujours pas pour quoi et que fair?

19 réponses

gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
5 févr. 2008 à 02:06
1 -tu utilises  pas de constructeur ni de destructeur et tu utilises des pointeurs
2 - ouvrire -> ouvrir
3 - tu initialise un ifstream en local mais ta classe ne le connais pas tu aurais du mettre dans le privte : ifstream & m_oFile;
4 - une classe sert de regroupement et de protection tu mets tout en public sans proteger tes données mets tes variables en private
      et utilise des get ou set pour la manipulation .

donc dans la methode ouvrir
tu fais
oFile.open(sName);

sName il recoit ces données ou? moi j'ai encore des erreurs ensuite mais plus le temps de verifié cela .
3
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011
5 févr. 2008 à 02:11
sName recoit ces données dans main car sais l'utilisateur qui doit dir ou pointé
 merci
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
5 févr. 2008 à 02:17
tu permets a l'utilisateur de modifié des données directement sans passé par ta classe je crois que tu devrais trouvé de l'information sur le premier modele d'une classe soit : l'encapsulation

regarde sur internet tu comprendras mieux comment doit  être creer une classe
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
5 févr. 2008 à 22:00
Prendre l'utilisateur de la classe (qui est, soit dit en passent, un programmeur) pour un idiot total est la plus grande idioties jamais inventée. Quand on sait programmer, on ne devrait même pas avoir à connaitre ce qu'est l'encapsulation.
Voilà, ce n'était ici que mon simple point de vue sur l'encapsulation. Je ne juge personne.

Ensuite, [auteur/SNPIERWOLF/1125650.aspx snpier wolf], ce n'est pas la première fois qu'on te le dis. Il faut ABSOLUMENT que tu ouvres un livre et comprenne les principes avant de les appliquer. Sinon, tu tourneras sans cesse en rond.

C++ (@++)<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
5 févr. 2008 à 23:14
ou quelque part il est ecrit que je l'est pris pour un idiot attention je lui donnais le nom du procédé qui permet de créer une classe en utilisant les données d'une maniere acceptable .

a moin que j'ai mal compris ton point de vue .

la classe permet justement à empecher l'utilisateur de modifie les données directement sans passer par la classe.
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
5 févr. 2008 à 23:23
Non non je n'est pas dis que tu l'avais traité d'idiot.
C'est le concept de tout cacher au programmeur utilisateur et passer par de couteux appels à des méthodes plutôt qu'un accès direct que je trouve idiot.
L'utilisateur n'est pas un crétin quand même. Il doit savoir ce qu'il fait, quand le faire et où le faire. Si il n'est pas capable de gérer convenablement un programme sans passer pour toute une surcouche inutile, peut-on l'appeler un programmeur ?

C++ (@++)<!--
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
5 févr. 2008 à 23:31
a bien ok je comprend malheureusement non le programmeur est pas forcement cretin  mais peux etre ignorant

pour une simple classe je comprend mais exemple permettre de pouvoir utilisé toute les variables de la classe string
une personne voulant le faire croyant que ca va resoudre quelque chose . peux faire cracher le programme

meme chose si tu as une variable membre appeller m_iSize et elle est un retour a une variable qui a été alouer ex : un tableau
un crache peux survenir et pourtant la compilation passe .

meme chose avec la classe fstream .

meme le mfc pareil .

au moins si tu te dis bof pas grave fais la validation la ou ta variable sera utilisé sur celui ci : ouvrir

mais bon je crois que cest un debat qui a pas lieu d'etre mais je trouve que c'est une bonne pratique de programmation
surtout avant de passer
au deuxieme : heritage et au 3er polymorphisme
0
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011
5 févr. 2008 à 23:34
si je commance a programmé avec des class sais bien parce que je suis au class dans le livre, mais je ne comprends pas tout a se qu'il dise alors j'essaie. et comme je n'arrivais toujours pas a comprendre mm en regardan sur le net j'ais posé la question dsl si elle était si idiote.
merci gamemonde sa marche mnt...
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
5 févr. 2008 à 23:37
la question etais pas idiote car il faut savoir que fstream enpeche le constructeur par copie il ne permet que l'envoi par reference
c'est pour cela que ca marchait pas
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
5 févr. 2008 à 23:39
Et bien désolé mais quand je vois que tu déclares fichier en local dans ouvrir puis tu essais de l'utiliser dans lire, je me dis que tu n'as pas encore compris la base.
(Oui, j'ai bien vue que tu avais corrigé par la suite).

C++ (@++)<!--
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
6 févr. 2008 à 13:07
[auteur/SAKINGDOM/617077.aspx SAKingdom]


"Quand on sait programmer, on ne devrait même pas avoir à connaitre ce qu'est l'encapsulation."
=> Justement si. Ton point de vue est compréhensible, mais tu oublies que l'encapsulation peut être très utile lors du debuggage. Donc "quand on sait programmer", on doit mettre en oeuvre des methodes pour faciliter le debug.
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
6 févr. 2008 à 14:03
Possible mais un programme ne restera pas éternellement en debug non plus.

C++ (@++)<!--
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
6 févr. 2008 à 23:10
attention regarde la definition de classe c'est l'encapsultation des données et la protection de celle ci
deplus elle ne reste pas toujours en mode debug . mais il peux y avoir d'autre programmeur qui vont l'utilisé

voir justement mon dernier message qui contient des exemples de classe qui doivent etre securisé
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
7 févr. 2008 à 00:26
Je sais ce qu'est le principe d'encapsulation, où et comment on devrait l'appliquer.
Ce principe aurait pu avoir du bon si on avait continué à apprendre au programmeur à être stricte et non à croire que c'est à la classe de tout faire le travail.
Je sais de quoi je parle ici. Je suis actuellement des cours en programmation (Java) et à entendre parler notre prof, l'encapsulation est un dieu. Tout ce qui va à l'encontre de l'encapsulation doit être banni et patati et patata.
De la manière dont on enseigne la programmation aujoud'hui, l'encapsulation, c'est
considérer l'utilisateur de la classe comme un incapable analphabet.

Pour ma part, je considère ce "débat" clos. Il est clair que chacun restera sur sa position pour des raisons tout à fait compréhensible. Il n'est donc pas très utile de continuer davantage.
Bonne continuation.

C++ (@++)<!--
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
7 févr. 2008 à 00:33
ok oui on a nos opinion juste un point on est d'accord que quand on programme et ensuite on nous enseigne on remarque que les profs on tendance a nous oubligé a faire des choses en disant on doit faire ci et cela encore la c'est que le prof a ses propres concept sur la prog  .

mais bon une fonction est comme un manipulateur de variable membre on voit pas le code qui a derriere ca fais pas de nous des idiots pour rien . c'est juste pour s'assurer que l'utilisateur de la classe modifie la variable et lui cause une erreur .

mais bon bonne continuation a toi aussi je suis sur on va se reparler

salut .
0
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011
8 févr. 2008 à 02:28
bonsoir j'ais de nouveau une autre question après j'arrette, pour quoi ceci me fait se programme a cessé de fonctionner?


 


int cModif()
{
  
   char* cMod;
    cout<<"\n>";
    cin>>cMod;
        O.modif(cMod);
    }
0
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011
8 févr. 2008 à 02:33
lol avec si peut d'info sa va etre dur de savoir.
voila je start mon prog la tout va bien après je charge le fichier sa va toujours mais quand je fais la saisie avec modif et que je tape enter sa plante et sa sa me le fait a chaque foix que j'utilise cin>>
vous avez une idé de la chose?
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
8 févr. 2008 à 03:31
cin>>cMod;
Il pointe où cMod ?

C++ (@++)<!--
0
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011
8 févr. 2008 à 17:06
okok merci j'ai compris il faut pas mettre char* cMod; mais char cMod[MAX_PATH];
car il je voulai pas un pointeur mais just une tableau qui qui prends la saisie pour modifié le fichier.
merci encors
0
Rejoignez-nous