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 :

2 fonctions en une ?


Sujet :

C++

  1. #1
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut 2 fonctions en une ?
    Bonjour,

    J'aimerais savoir quel est la meilleur option lorsque l'on a 2 fonctions membres
    d'une même classe qui font exactement la même chose à un détail près.
    La 1ere fonction prend une valeur comme argument et assigne celle-ci à une variable membre.
    La 2eme fonction ne prend pas d'argument et initialise directement la variable membre à zéro.
    Ensuite le code des 2 fonctions est identique.

    C'est un peu dommage de réécrire 2 fois le même code juste pour une histoire d'initialisation.

    Faut-il une fonction virtuelle ?

    Si quelqu'un peut m'éclairer

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Mettre 0 comme valeur par défaut au paramètre de la fonction ?

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Faire par exemple une fonction interne (privée ou protégée) qui contient le code commun et l'appeler par chacune des 2 fonctions publiques ; ces dernières peuvent éventuellement être "inline" si elle contiennent peu de code spécifique, ce qui supprime la pénalité (en temps machine) due à l'appel de fonction supplémentaire.

  4. #4
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut
    Non, ça va pas le faire.
    J'ai oublié de dire que le type de l'argument est en fait géré par les templates.
    Donc si le type est une structure par ex, ça marchera pas.

  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
    Donc si le type est une structure par ex, ça marchera pas
    Alors comment fais-tu dans ton code pour "affecter zéro" lorsque le paramètre est de type structure ? On peut en voir un morceau ?

  6. #6
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut
    Non, ça va pas le faire.
    J'ai oublié de dire que le type de l'argument est en fait géré par les templates.
    Donc si le type est une structure par ex, ça marchera pas.
    C'était en réponse à Laurent.
    Rigobert a posté sa solution entre temps

    Je vais voir pour ta solution Rigobert

  7. #7
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut
    Ben j'ai déjà essayé de mettre 0, mais le compilo me dit que l'argument attendu est une struct et pas un int.

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Citation Envoyé par tintin72
    Ben j'ai déjà essayé de mettre 0, mais le compilo me dit que l'argument attendu est une struct et pas un int.
    si c'est un template, passer struct ou int en paramètre c'est normalement kif-kif ?!

    est-ce que tu peux faire un copier-coller du code des déclarations et des appels ?

  9. #9
    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
    Citation Envoyé par tintin72
    Ben j'ai déjà essayé de mettre 0, mais le compilo me dit que l'argument attendu est une struct et pas un int.
    Normal... Donc en gros tu ne peux appeler la fonction sans paramètre qu'avec des types constructibles à partir d'entiers c'est bien ça ?

  10. #10
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut
    C'est un peu compliqué.
    Voici le début du code des 2 fonctions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    template <typename T>
    int CList<T>::function1(const T & val)
    {
        CElement<T> *newElem = new CElement<T>(val);
       ....
    }
     
    template <typename T>
    int CList<T>::function2()
    {
        CElement<T> *newElem = new CElement<T>;
        ... 
    }
    le principe c'est:

    les 2 fonctions instancient un objet CElement l'une en appelant le constructeur avec argument l'autre en appelant le constructeur simple.
    Le pb c'est, si je met 0 en argument de la 1ere fonction, tout dépend du type T.
    Si T est un int, un float etc.. ça marche, mais si T est une structure ça marche plus (voir erreur du compilo plus haut).

  11. #11
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut
    C'est bon j'ai trouvé
    En fait un simple if else pour savoir si val est égale à 0 suffit.
    Il reste plus ensuite qu'a diriger vers le constructeur adéquat.

    C'est les templates qui m'ont un peu embrouillé

    Merci

  12. #12
    Membre confirmé Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par défaut
    Salut,
    Uh oui, mais tu ne pourras pas insérer la valeur 0 dans ce cas.
    A moins que tu sois sûr de ne jamais mettre la valeur 0, bien sûr.

    La méthode simple est une surchage de la méthode. Cela ne permet de limiter le code mais au moins tu l'utilises comme s'il n'y en avait qu'une.

  13. #13
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut
    Oui, je crois que tu as raison.
    Je vais plutot surcharger la fonction, ce sera plus simple.
    Tant pis pour la répétition du code.

  14. #14
    Membre confirmé Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par défaut
    Sinon, il faut que tu rajoutes un paramètre à la fonction si tu ne veux vraiment pas en avoir deux.
    Tu mets par exemple un booléen, et en fonction de ce booléen tu appelles le constructeur que tu veux.

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

Discussions similaires

  1. [VB6]Valeurs une collection renvoyée par la fonction d'une classe
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 30/03/2004, 11h04
  2. Réponses: 4
    Dernier message: 17/03/2004, 17h24
  3. Réponses: 14
    Dernier message: 15/01/2004, 01h15
  4. [VStudio 6] pb avec fonctions dans une DLL
    Par MogDeChNord dans le forum MFC
    Réponses: 8
    Dernier message: 08/01/2004, 08h57
  5. [VB6] Ajouter un commentaire à une fonction d'une DLL
    Par Ace303 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/06/2003, 08h14

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