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

Discussion :

Surcharge de l'opérateur "<<"

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut Surcharge de l'opérateur "<<"
    Bonjour,
    j'ai écrit une classe QWidget (que j'appelle qConsole) composé d'un QTextEdit et dont le but est de simuler grossièrement une console dans mon IHM. Ainsi il toutes les classes ayant connaissance de qConsole peuvent facilement addresser des messages à l'utilisateur.
    En plus de comporter des fonctions de traitement d'erreur spécifiques de mon programme, j'ai essayé avec un succès mitigé de sucharger l'opérateur "<<"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    //qConsole.cpp
    #include <QVBoxLayout>
    #include <QString>
    #include "qConsole.h"
     
    qConsole::qConsole (QWidget *parent) : QWidget(parent){
     
    	cZone = new QTextEdit("console Zone!");
    	QVBoxLayout *layout = new QVBoxLayout();
    	layout->addWidget (cZone);
    	setLayout(layout);
     
    }
     
    void qConsole::operator<<(QString *qString){cZone->append(*qString);}
    void qConsole::operator<<(char *inText){cZone->append(QString::fromAscii(inText));}
    void qConsole::operator<<(float *value){cZone->append(QString::number(*value));}
    mais cette surcharge ne fonctionne que pour les char et je ne comprends pas pourquoi!
    Merci d'avance pour votre aide!!

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 150
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Pouvez vous précisé lorsque vous dites que cela ne marche pas.
    Est ce que ça compile,

    Ou alors c'est le texte qui a un problème?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    qConsole compile, le programme compile aussi
    quand je l'utilise avec des char :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    console<<"les char passents"//compile;
     
    QString texte ="les Qstring par contre...";
    console<<texte; //compile plus!
    console<<25; // compile pas plus

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Pour pouvoir enchaîner les appels, les opérateurs devraient retourner un qConsole& :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    qConsole& qConsole::operator<<(/*paramètre*/)
    {
       // ... en fonction de la spécialisation.
      return *this;
    }
    Pour les chaînes de caractère à la 'C' (tableau de char avec \0 à la fin) , la surcharge devrait prendre un const :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    qConsole& qConsole::operator<<(char const *inText); // permet <<"blablabla"
    qConsole& qConsole::operator<<(wchar_t const *inText);// idem pour l'UNICODE
    Pour tout les autres types, ce devrait être un passage par valeur ou par référence constante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    qConsole& qConsole::operator<<(char inChar); // permet <<'c'
    qConsole& qConsole::operator<<(wchar_t inChar); // idem pour l'unicode
    qConsole& qConsole::operator<<(double value);
    qConsole& qConsole::operator<<(maClasse const & mon_objet_);

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    merci archi3D!!
    je teste ca de suite

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    ca marche merci!

    Mais par contre autant je vois à peu près pourquoi, les passages par références contantes marche mieux, autant je ne comprens pas pourquoi, les opérateurs doivent retourner le qConsole&??

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Surcharge de l'opérateur new
    Par :Bronsky: dans le forum C++
    Réponses: 17
    Dernier message: 27/10/2010, 21h33
  2. Réponses: 6
    Dernier message: 12/07/2006, 15h34
  3. Réponses: 15
    Dernier message: 25/01/2005, 16h51

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