Paramétre par defaut c++ et donnés membre
Résolu
Bonjour,
Est il possible de definir une donné membre en tant que par paramétre par defaut dans une fonction membre?
j'ai essayer le compilateur m'indique que ce n'est pas autoriser ,que faire ?
Est il possible de definir une donné membre en tant que par paramétre par defaut dans une fonction membre?
j'ai essayer le compilateur m'indique que ce n'est pas autoriser ,que faire ?
A voir également:
- Paramétre par defaut c++ et donnés membre
- Remettre parametre usine pc - Guide
- Parametre dns - Guide
- Membre indisponible vinted - Guide
- Parametre windows - Guide
- Netflix paramètre compte - Guide
3 réponses
Effectivement ceci ne marchera pas :
Voici une manière de s'en sortir
Bonne chance
#include <iostream> class MaClasse{ private: int membre; public: MaClasse(int membre0 = 0): membre(membre0) {} inline void maMethode(int x = this->membre){ std::cout << x << std::endl; } }; int main(){ MaClasse m; m.maMethode(); m.maMethode(5); return 0; }
Voici une manière de s'en sortir
#include <iostream> class MaClasse{ private: int membre; public: MaClasse(int membre0 = 0): membre(membre0) {} inline void maMethode(int x){ std::cout << x << std::endl; } inline void maMethode(){ maMethode(membre); } }; int main(){ MaClasse m; m.maMethode(); m.maMethode(5); return 0; }
Bonne chance
oui merci ,utiliser la surcharge j'y avait pas penser ça m'a en tous cas beaucoup aider mais je suis toujours preneur d'autre solutions.
Je doute qu'il y en ait avec une méthode, car le résultat renvoyé par une méthode ne peut être résolu à la compilation, et c'est la raison pour laquelle ton compilateur refuse cette syntaxe. Concrètement écrire :
... compile deux fonctions :
La seule manière de s'en sortir pour injecter du code comme tu voudrais le faire serait que ta fonction f soit une macro (#define f....) qui sera évaluée par le précompilateur. Beaucoup plus compliqué, moins élégant, moins pratique et assez injustifié je trouve.
void f(int x = 2){ return x; }
... compile deux fonctions :
void f(int x){ return x; } void f(){ return 2; }
La seule manière de s'en sortir pour injecter du code comme tu voudrais le faire serait que ta fonction f soit une macro (#define f....) qui sera évaluée par le précompilateur. Beaucoup plus compliqué, moins élégant, moins pratique et assez injustifié je trouve.