Bonjour tout le monde,
Je veux créer une fonction avec un nombre de paramètres variables.
à peut près comme le printf avec laquelle on peut écrire un nombre de variables paramètres.
Bonjour tout le monde,
Je veux créer une fonction avec un nombre de paramètres variables.
à peut près comme le printf avec laquelle on peut écrire un nombre de variables paramètres.
Là :
http://c.developpez.com/faq/c/?page=..._args_variable
Mais en C++ on fait beaucoup mieux :
http://c.developpez.com/faq/cpp/?pag...hainage_appels
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Deux autres possibilites permettant de traiter certaines utilisations:
- la surcharge
- les parametres ayant une valeur par default
Je me suis toujours demandé quelles étaient les différences, d'un point de vue implication / choix ?Envoyé par Jean-Marc.Bourguet
Les parametres avec une valeur par defaut sont plus simples a ajouter.Envoyé par Aurelien.Regat-Barrel
La surcharge permet:
- d'avoir un comportement plus different de maniere raisonnable
- d'avoir des pointeurs de fonctions pour toutes les signatures apparentes
- un plus grand choix de signature (les parametres avec une valeur par defaut sont d'office a la fin)
Salut,
Une fonction avec un certain nombre d'argument par défaut aura cependant un inconvéniant majeur:
Rien n'empeche de fournir une déclaration de fonction sous la forme de
dont l'appel fonctionnera donc sans fournir de parametre, vu qu'ils ont tous leur valeur par défaut...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 type& mafonction(const std::string& str="", int i=0, float f=0.0, double d=1e-10, long l=0xFFFFDD)
Seulement, si tu veux fournir une valeur différente de 0xFFFDD pour l, tu sera obligé de fournir une valeur pour str, i, f et d
Si, parce que ca peut arriver, ta fonction a réellement besoin, lors de son appel, de tous les arguments, qu'il aient ou non gardé leur valeur par défaut, ce sera effectivement ainsi qu'il faudra fonctionner...
Si, par contre, la fonction doit etre chainée en acceptant soit une chaine, soit un entier, soit un réel, soit un long... ce sera vers la surchage qu'il faudra te tourner![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Merci. Et le parametre par defaut ne peut pas etre du type reference non const si je ne m'abuse.
Mais je me demandais surtout s'il vaut-il mieux enrichir une fonction deja existante et largement utilisee dans un projet en lui ajoutant un nouveau parametre par defaut ou creer une nouvelle surcharge (qui peut appeller cette fonction existante).
C'est quelque chose que l'on decide intuitivement, mais ca a des implications differentes que je maitrise mal. En reflechissant, je dirais que l'on peut ajouter des parametres a ceux existants s'ils peuvent etre combines avec ces derniers pour influencer le comportement de la fonction.
Exemple:
si je veux enrichir la fonction Draw() pour lui donner la capacite de dessiner en transparence ainsi que la possibilite de redimensionner le dessin, avec la surcharge:
je ne peux pas combiner le redimensionnement avec la transparence, c'est l'un XOR l'autre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 void Draw(); void Draw( const Size & ); void Draw( float Oppacity );
En ce qui concerne l'ajout de parametre, j'ai du mal a en cerner les limitations / abus. Ce qui me gene c'est que modifier une signature revient a casser le contrat initial de la fonction vis a vis du code qui l'utilise. La valeur par defaut rattrappe le coup, mais bon... Et souvent, l'utilisation que j'en ai vu sert a bidouiller une correction de bug dans un cas particulier.
Partager