Paramétre par defaut c++ et donnés membre

Résolu
2149chakala -  
mamiemando Messages postés 33784 Date d'inscription   Statut Modérateur Dernière intervention   -
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 ?


A voir également:

3 réponses

mamiemando Messages postés 33784 Date d'inscription   Statut Modérateur Dernière intervention   7 885
 
Effectivement ceci ne marchera pas :

#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
1
2149chakala
 
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.
0
mamiemando Messages postés 33784 Date d'inscription   Statut Modérateur Dernière intervention   7 885
 
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 :

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.
0