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 :

Problème de passage de paramètres au constructeur de la classe mère


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 43
    Points : 31
    Points
    31
    Par défaut Problème de passage de paramètres au constructeur de la classe mère
    Bonjour,

    Je dispose de 2 classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class A{
       private : 
       std::string nom;
       int valeur;
     
       public : 
       A(std::string,int);
    };
     
    class B : public A{
     
       protected :
       static int numero;
     
       public :
       B(std::string nom,int valeur);
       B(int);
    };
    Tout va bien pour le premier constructeur de B, lorsque j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B::B(std::string nom, int valeur) : A(nom,valeur){...}
    Par contre, je ne vois pas du tout comment faire pour utiliser le second constructeur. En fait, je voudrais qu'un nom par défaut (mais différent à chaque fois) soit attribué, en utilisant la variable static numero.

    En gros, je voudrais passer en argument une string de valeur : "Objet_"+numero

    Le problème qui se pose est que C++ ne fait pas un transtypage automatique de int vers string et je n'arrive pas à voir comment je pourrais faire.

    Je sais que je pourrais utiliser stringstream, mais impossible pour un passage de paramètre direct au constructeur de la classe mère.

    Quelqu'un aurait-il une solution à me proposer ?

    Merci.

    PS : En Java, la manipulation serait plus facile en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public B(int valeur){
       super("Objet_"+numero,valeur);
       numero++;
    }

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 32
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Pourquoi ne pas utiliser une méthode privée convertissant un int en string ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::ostringstream ss;
    ss << "Objet_" << valeur;
    return ss.str();

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Oui, mais cela ne me permet pas de passer l'argument au constructeur de la classe mère...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 32
    Points : 41
    Points
    41
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class B : public A {
    private :
        std::string methode(int valeur) {
            std::ostringstream ss;
            ss << "Objet_" << valeur;
            return ss.str();
        }
    public :
        B(int valeur) : A(methode(valeur), valeur) { }
    };
    Où est le problème ??

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Ha d'accord ! Je n'avais pas compris ça comme ça.

    Merci, je vais tester.

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Idwakest Voir le message
    Où est le problème ??
    Ça appelle une fonction membre sur un objet non encore construit

    D'ailleurs, ce genre de fonction, qui n'est utile qu'à un endroit et ne fait pas vraiment partie de la classe, j'aurais carrément tendance à la sortir de la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class A{
       private : 
       std::string nom;
       int valeur;
     
       public : 
       A(std::string,int);
    };
     
    class B : public A{
     
       protected :
       static int numero;
     
       public :
       B(std::string nom,int valeur);
       B(int);
    };
    .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    namespace details
    {
      std::string build_a_name(int v_)
      {
            std::ostringstream ss;
            ss << "Objet_" << v_;
            return ss.str();
      }
    }
    B::B(int i_):A(details::build_a_name(i_),i_)
    {}

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Ça appelle une fonction membre sur un objet non encore construit

    D'ailleurs, ce genre de fonction, qui n'est utile qu'à un endroit et ne fait pas vraiment partie de la classe, j'aurais carrément tendance à la sortir de la classe :
    ... ou à la rendre statique, étant donné qu'elle ne dépend a priori d'aucune instance de la classe

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par koala01 Voir le message
    ... ou à la rendre statique, étant donné qu'elle ne dépend a priori d'aucune instance de la classe
    J'en vois pas trop l'intérêt pour une fonction qui ne sert qu'à construire un paramètre du constructeur et ne fait pas sens avec les services de la classe.

    En revanche, en C++0x, une lambda ferait bien l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    B::B(int i_):A(
    	[i_]() ->std::string{
    		std::ostringstream ss;
            ss << "Objet_" << i_;
            return ss.str();
    	}()
    	,i_)
    {}

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 09/06/2006, 10h03
  2. Problème de passage de paramètres à une procedure
    Par momo62 dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 22/12/2005, 15h22
  3. [template] problème de passage de paramètres
    Par vinny_the_true dans le forum C++
    Réponses: 2
    Dernier message: 14/12/2005, 01h15
  4. Réponses: 9
    Dernier message: 13/05/2005, 03h13
  5. problème de passage de paramêtre sous mozilla
    Par mat10000 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 27/09/2004, 10h48

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