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 :

[POO] Surcharge de méthode et "paramètre composé"?


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut [POO] Surcharge de méthode et "paramètre composé"?
    Salut à tous ,

    Alors voila mon "problème":

    Je programme une console pour mon projet actuel (un framework/moteur pour jeux 2D), qui a pour fonction de permettre l'affichage de tout et n'importe quoi à l'écran, que ce soit des entiers, des chaines ,etc.
    Pour le moment, j'ai surchargé ma méthode d'écriture "Write" de manière à supporter divers types de paramètres, soit:

    -Console.Write(int)
    -Console.Write(std::string)
    -etc

    Cependant, cela signifie que pour afficher ma variable v1, avec quelque chose du genre "Variable v1= 10", je dois écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Console.Write("Variable v1= ");
    Console.Write(v1)
    Ce que je voudrais pouvoir faire serait plutôt quelque chose dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Console.Write("Variable v1= "+v1);
    Cela est peut être tout bête à réaliser, mais je n'ai aucune idée de la manière dont je dois procéder, sachant que je ne suis même pas sur que cela ait à voir avec la surchage de méthode .

    Bref, est-il possible de concatener des variables de différents types en un seul paramètre à envoyer à la méthode? Si oui, est-ce au niveau de la méthode en question que cela est réalisé (avec l'ajout d'un operateur + ou je ne sais quoi), ou au niveau du type que je compte renvoyer (en l'occurence un string).

    Merci d'avance pour votre aide

  2. #2
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Bonjour,

    Effectivement, ça n'a aucun rapport avec la surcharge de fonction !

    Rien que cela n'est pas possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::string s = "une chaine " + variable;
    Car "une chaine " est une string-literal, qui n'est rien d'autre qu'une façon plus courte d'écrire un tableau de char :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char c[] = {'u', 'n', 'e', ' ', ...};
    La somme d'un tableau de char et d'un entier donne un pointeur sur char, donc rien à voir avec une std::string.
    La somme d'un tableau de char et de tout autre chose n'est pas définie.
    Bref, dans les deux cas, ça ne peut pas compiler.

    Si tu veux pouvoir écrire le tout sur une ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::string s = std::string("une chaine ") + variable;
    ou dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Console.Write(std::string("Variable v1= ") + v1);
    Ceci fonctionne car la somme d'une std::string et d'un entier (ou d'un double, d'un long, et j'en passe) est définie (grâce à une surcharge de l'opérateur +) et donne une autre std::string.

    Je suppose qu'avec ça, tu vas continuer à préférer écrire sur deux lignes


    Autre chose, pour ta fonction Write(), fais plutôt un template de fonction plutôt que de surcharger manuellement pour tous les types possibles.
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoups pour ta réponse, je vois un peu mieu le "truc" .

    Je penses en effet que je vais rester avec mes deux lignes dans ce cas .
    A vrai dire, je me basais sur le Console.Write() de .NET, où il est possible de faire ce genre de chose (en C# dumoins, car je n'ai pas testé .NET avec du C++, mais il me semble que c'est pareil). Aurais-tu une idée de comment cela est réalisé?

    Côté template, je vais voir ça de plus près .

    En tout cas, merci encore pour ta réponse ainsi que ta rapidité !!

  4. #4
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par Althar Voir le message
    A vrai dire, je me basais sur le Console.Write() de .NET, où il est possible de faire ce genre de chose (en C# dumoins, car je n'ai pas testé .NET avec du C++, mais il me semble que c'est pareil). Aurais-tu une idée de comment cela est réalisé?
    En Java, les string-literals sont directement du type String. La somme d'une String et d'un int est définie en dur par le langage. Je suppose que c'est pareil en C#.

    Le C++ vient du C. Les string-literals de type char[] est un héritage du C. Ça a ses inconvénients et ses avantages (message subliminal).
    C'est peut-être plus compliqué dans des cas comme le tiens, mais au moins ça démontre l'extensibilité du langage. La classe std::string est entièrement écrite en C++, ce qui ne peut être le cas pour String en Java, vu que ce langage ne supporte pas la surcharge d'opérateurs.
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Pourquoi pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console << "Variable v1= " << v1;
    ?

    MAT.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Salut à toi Mat007,

    Merci pour la suggestion, j'ai décidé d'opté pour , car c'est au final la méthode la plus simple et la plus ergonomique pour le programmeur.
    J'avais aussi essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Console.Write(std::string("Variable v1= ") + v1);
    Mais même là il m'a fallut surcharger l'opérateur "+" de std::string pour pouvoir renvoyer le string "Variable v1= 10" au lieu de décaler le string d'un offset de 10.

    Bref, je me retrouve avec mon opérateur << avec template, et ça marche du tonnerre !!

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

Discussions similaires

  1. POO : surcharge de méthode statique
    Par Kropernic dans le forum VB.NET
    Réponses: 7
    Dernier message: 28/03/2014, 09h49
  2. [POO] Surcharge de méthode __call
    Par ascito dans le forum Langage
    Réponses: 3
    Dernier message: 04/07/2008, 20h19
  3. [POO] Héritage et surcharge de méthodes
    Par defkid dans le forum Langage
    Réponses: 4
    Dernier message: 26/02/2007, 14h51
  4. [POO] Surcharge de méthode
    Par ouioui2000 dans le forum Langage
    Réponses: 4
    Dernier message: 09/03/2006, 15h25

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