IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Surcharge de l'opérateur + pour écrire dans un fichier


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut Surcharge de l'opérateur + pour écrire dans un fichier
    Bonsoir tout le monde,

    Alors voila j'explique la situation, pour un laboratoire de programmation, nous avons une classe qui nous permet de manipuler des fichiers, avec une méthode pour avoir des statistiques (nombre de lignes et de mots, etc).

    Je dois réaliser une surcharge de l'opérateur + qui me permet d’ajouter une ligne au fichier. Les opérandes de l’opérateur sont un objet fichier et une chaîne de caractères (la ligne que l’on ajoute) c’est-à-dire f+l ajoute la ligne l à l’objet fichier f.

    J'avoue que je suis assez coincé sur cette parti là ... Si quelqu'un pourrait me donner quelques pistes pour la résolution, ca serait vraiment sympa

    Merci, bonne soirée, Florent - alis tonton flubb

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    La surcharge des opérateurs est traitée dans la FAQ, ainsi que dans tout bon cours de C++. Qu'est-ce qui te bloque exactement ?

    A part ça, sémantiquement tu aurais plus besoin d'un += que d'un +. Voire même d'un <<, pour faire chic.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut
    ce qui semble genant dans la surcharge de l'operateur + c'est que
    tu vas perdre le sens de permutabilité la tu vas perdre la logique du +

  4. #4
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut
    Oui j'avais aussi pensé à un << mais la consigne est claire, il faut un +.

    K'ai déjà travaillé avec des surcharges. Ce qui me bloque ici, c'est que je ne vois pas trop quel type utiliser (ofstream, ifstream, ...) et si je dois faire du passage par référence et tout ca...

    Merci de vos réponses en tout cas

    Florent

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Oui j'avais aussi pensé à un << mais la consigne est claire, il faut un +.
    La sémantique de l'opérateur + est d'additionner ses deux opérandes et de renvoyer un nouveau résultat ; en aucun cas il va affecter le résultat à l'une d'entre elles. Or je vois mal ton opérateur + renvoyer un nouveau fichier à chaque opération, il va bien modifier celui passé en paramètre. Il te faut donc un +=, au moins.
    Enfin bon, si ce sont les instructions...

    K'ai déjà travaillé avec des surcharges. Ce qui me bloque ici, c'est que je ne vois pas trop quel type utiliser (ofstream, ifstream, ...) et si je dois faire du passage par référence et tout ca...
    C'est pas très clair tout ça
    C'est l'écriture de l'opérateur qui te pose problème ? L'écriture dans le fichier ? Ou bien ta classe possède déjà les fonctions adéquates pour ça ?

  6. #6
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut
    Le problème c'est l'écriture de la surcharge oui. J'avais commencer avec un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    friend ostream& operator + (ifstream fichier,char tmp[200]);
     
    ostream& operator + (ifstream fichier,char tmp[200]) {
    }
    Mais je m'embrouille un peu ...

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut
    Voila un lien sur la faq :
    http://c.developpez.com/faq/cpp/?pag...RGE_definition


    Tu dois écrire un bout de code comme ça mais comme dit avant tu vas tenter d additionner un fichier a une ligne ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    friend  type_de_retour operator+ (type1 operande1, type2 operande2)
    sur ce type d'operateur tu gardes la logique
    Le concept d addition reste logique et tout le monde le comprendra
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    friend  int operator+ (int op1,int op2);
    friend complex operator+ (complex op1,complex op2);
    Faire l'addition d'une ligne et un fichier me semble hasardeuse

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut
    la logique de ton operateur est elle de concatener
    le fichier ifstream + la ligne pour faire un second fichier ?
    et peux tu ecrire la maniere dont tu vas ecrire la ligne de test ?

  9. #9
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut
    En fait j'ai un fichier avec un texte déjà présent, et lorsqu je fais fichier+texte a ajouter, cela doit ajouter 'texte à ajouter' dans le fichier 'fichier', à la suite du texte déjà présent.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut
    voila ton code,

    je comprends pas trop l'interet pour faire la meme chose c est plus rapide
    de faire un file << ligne et y a pas besoin de surcharger d'operateurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    friend ostream& operator + (ostream & os,string s);
     
    ostream& operator + (ostream & os,string s) {
    os << s;
    return os;
    }

  11. #11
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut
    Merci le principe fonctionne, je n'ai plus qu'a adapter pour ajouter ca en fin de fichier
    Encore un grand merci !

    Oui c'est sur que c'est plus simple de faire file<<chaine, mais l'esprit de la consigne ici était à mon avis d'utiliser les surcharges.
    Merci ! Bonne soirée!

    Florent

  12. #12
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 297
    Par défaut
    On n'a pas déjà eu cet exo au "semestre" précédent ?
    Je me souviens d'un autre opérateur + utilisé à mauvais escient.

    Citation Envoyé par Laurent
    Enfin bon, si ce sont les instructions...
    Voyons. Sans des "instructions" pareilles, comment peux-tu arriver à justifier dans un cours sur un autre langage que les opérateurs ne sont bons qu'à obscurcir un code?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 399
    Par défaut
    Citation Envoyé par tonton flubb
    Merci le principe fonctionne, je n'ai plus qu'a adapter pour ajouter ca en fin de fichier
    Encore un grand merci !

    Oui c'est sur que c'est plus simple de faire file<<chaine, mais l'esprit de la consigne ici était à mon avis d'utiliser les surcharges.
    Merci ! Bonne soirée!

    Florent
    Dis quand même à ton prof de renommer ce + en += : Ce n'est pas un vrai +, et c'est même une affreuse erreur de débutant!
    (oui, traite ton prof de débutant avec cette erreur, il devrait comprendre).

    Quand je pense que même en entreprise on trouve une hérésie pareille...

    Edit: Un bon moyen de le prouver: Les arguments d'un vrai opérateur + doivent être constants ou passés par valeur. Ici, le ostream est passé par référence non-constante, ce n'est donc pas un vrai opérateur +.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 14
    Par défaut
    Merci pour l'info, je vais transmettre ca !

Discussions similaires

  1. erreur asp pour écrire dans un fichier
    Par Metal dans le forum ASP
    Réponses: 6
    Dernier message: 16/08/2006, 12h18
  2. Réponses: 12
    Dernier message: 26/07/2006, 13h08
  3. Réponses: 20
    Dernier message: 27/06/2006, 18h42
  4. [DOS] Commande pour écrire dans un fichier texte
    Par Jeff87-01 dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 28/03/2006, 02h04
  5. Réponses: 3
    Dernier message: 21/03/2006, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo