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 :

Passer en paramètre d'une fonction (...)


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Points : 635
    Points
    635
    Par défaut Passer en paramètre d'une fonction (...)
    Salut a tous,

    j'ai une méthode virtuelle et je voudrais que pour les classes filles, le nombre de paramètres passés change.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class toto {
    virtual int somme (...);
    };
     
    class toto1: public toto {
    int somme (int a, int b) {return(a+b);}
    };
     
    class toto2: public toto {
    int somme (int a, int b, int c) {return(a+b+c);}
    };
    Je sais que ca se resout facilement avec un tableau ou pointeur, mais le truc c'est que j'aimerais passer des arguments de types differents.

    Alors y'a-t-il un moyen de faire marcher ce code d'une maniere ou d'une autre ?

    Merci
    ++

  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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Non ce n'est pas possible. Pour redéfinir une méthode virtuelle tu dois garder exactement la même signature.

    Mais je crois que tu as un problème de conception, si tu souhaites ajouter un paramètre c'est que ce n'est pas tout à fait la même fonction. Peut-être que ce que tu veux c'est juste ajouter un paramètre optionnel (auquel cas c'est possible) ? C'est pour faire quoi exactement ?

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Si tu veux changer la signature de ta fonction c'est que tu n'as pas bien compris le focntionnement des fonctions virtuelles. Dans ton exemple, que se passerait-il si on faisait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    toto * t = new toto2;
    t->somme( 1, 2 )?

  4. #4
    Fry
    Fry est déconnecté
    Membre régulier Avatar de Fry
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 150
    Points : 119
    Points
    119
    Par défaut
    sinon tu peu utiliser boost_any ( http://www.boost.org/doc/html/any.html )
    ca te permet de passer n importe quel type et de le recupere avec un cast dans ta fonction (ca evite de se galerer avec des void**)

    niveau conception est ce que ca denote forcement un probleme?
    j ai utilise cette methode pour le mapping du clavier avec des fonctions (qui n ont donc rien en commum a part le fait qu elle sont appele en fct de la touche appuye)

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    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 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Et pourquoi pas boost::function plutôt ?
    (le seul moment où j'ai eu besoin de boost::any pour l'instant, c'était pour gérer et stocker des options qui peuvent avoir des types différents)

  6. #6
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Points : 635
    Points
    635
    Par défaut
    ok merci pour toutes vos reponses

    ++

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

Discussions similaires

  1. Passer un paramètre d'une fonction dans une autre
    Par Invité dans le forum MATLAB
    Réponses: 2
    Dernier message: 18/04/2014, 09h52
  2. Réponses: 1
    Dernier message: 29/09/2011, 23h40
  3. Réponses: 6
    Dernier message: 04/04/2011, 21h22
  4. Réponses: 2
    Dernier message: 28/04/2008, 20h04
  5. Réponses: 3
    Dernier message: 16/05/2007, 10h03

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