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 :

objet avec constructeur surchargé


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut objet avec constructeur surchargé
    Bonsoir tous,

    j'ai une classe "class1" qui contient des objets d'une sous classe "class2", en pratique ça ressemble à ceci (j'ai deux constructeur

    pour la class2 un cas sans option et un cas qui prend un booleen en entree et un double):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class class1
    {
    public:
    class1();
    ~class1();
    private:
    class2 objet1;
    class2 objet2(true,100.5);
    };
    Ensuite, dans une méthode de cette classe n°1 j'essai de faire un vecteur d'objets n°2.

    Du coup dans la méthode dont je vous parle je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     objectVector1.assign(10,objet1);
     objectVector2.assign(10,objet2);
    Le soucis est qu'à chaque fois que je compile ça ne fonctionne pas car je n'arrive pas à déclarer comme il faut mes

    objets 1 et 2....

    pourriez vous me dire comment faire s'il vous plait pour faire ces deux vecteurs d'objets qui ont des structeurs différent ,


    je vous remercie

  2. #2
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    ne connaissant pas ton programme il est difficile de faire un diagnostique !

    Apparemment un constructeur utilise des valeurs constantes. Tu peux donc avoir dans class2.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class2 {
    public:
        class2( const bool boolValue = true, const double doubleValue = 100.5 ) {...}
        ....
    private:
        ....
    };
    Lorsque tu déclarera ta class2, si tu ne donne pas de valeur au constructeur il prendra celle par défaut (boolValue, doubleValue). Tu peux maintenant ne déclarer qu'un vecteur dans class1.

    Si c'est un problème d'initialisation de vecteur de bonnes explications ici.

    Si je suis complétement à coté de la plaque, peux tu poster un peut plus de détail sur tes classes ?

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 130
    Points : 33 063
    Points
    33 063
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class2 objet2(true,100.5);
    C'est dans ta déclaration de class1 ça ?
    Ce n'est pas du tout valide..., on déclare les membres, mais on les initialise dans un constructeur.

    ça ne fonctionne pas
    Je ne sais que dire devant ce message d'erreur Ô combien explicite...
    Ca compile ? Ca crash ? Ca donne un mauvais résultat ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    excusez moi, je n'ai pas été très clair.
    Voici l'erreur que j'obtiens dans le constructeur de ma class "Equipe" :
    -no match for personnage();
    -no match for personnage(bool,double);
    je recommence. Voici mes différents fichiers :
    Equipe.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include "personnage.h"
    class Equipe
    {
    public:
        Equipe();
        ~Equipe();        
    private:
        myMethod();
        Personnage personnage1;
        Personnage personnage2(bool,double);
        std::vector<Personnage> foot;
    	std::vector<Personnage> hand;
    };
    Equipe.cpp
    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
    #include "equipe.h"
    #include "personnage.h"
     
    using namespace std;
    Equipe::Equipe()
    {
        personnage1();
        personnage2(true,100.5);
    }
    Equipe::~Equipe() {}
    void Equipe::myMethod()
    {
        foot.assign(100,personnage1);
        hand.assign(100,personnage2);
    }
    Personnage.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Personnage
    {
    public:
        Personnage();
        Personnage(bool,double);
        ~Personnage();
    private:    
        friend class Equipe;
    };
    Personnage.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include "personnage.h"
    using namespace std;
    Personnage::Personnage() {}
    Personnage::Personnage(bool myBool,double value) {}
    Personnage::~Personnage() {}

  5. #5
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    Là, je pense que tu fais un appel de foncteur sur personnage1 et personnage2. Ta syntaxe est valide dans une liste d'initialisation :

    Equipe.cpp
    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
    #include "equipe.h"
    #include "personnage.h"
     
    using namespace std;
    Equipe::Equipe():
        personnage1(),
        personnage2(true,100.5) 
    {
     
    }
    Equipe::~Equipe() {}
    void Equipe::myMethod()
    {
        foot.assign(100,personnage1);
        hand.assign(100,personnage2);
    }

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 130
    Points : 33 063
    Points
    33 063
    Billets dans le blog
    4
    Par défaut
    Il te faut revoir les bases du langage. La grammaire est mauvaise.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personnage personnage2(bool,double);
    N'est pas valide dans ta déclaration. A moins que tu veuilles vraiment déclarer un pointeur sur fonction qui retourne un Personnage et prend en paramètre un bool et un double ?
    Ou bien une méthode membre nommée personnage2 prenant en paramètre un bool et un double qui retourne un Personnage ?
    J'en doute.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        personnage1();
        personnage2(true,100.5);
    Comme ça en plein milieu, c'est pas valide non plus.
    Ca correspond à un appel d'une fonction personnege1 sans paramètre et une fonction personnage2 avec true et 100.5 .
    Comme personnage1 et personnage2 sont des membres de type Personnage, ça correspond alors à un appel à l'opérateur() avec les mêmes paramètres.
    Tu as 2 membres (mal déclaré pour le 2° - cf plus haut), qui doivent être initialisés par la liste d'initialisation.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    en fait ce que je veux c'est déclarer en tant qu'attribut de la classe "equipe" deux objets différents (de la classe personnage).

    - le premier objet (personnage1) fait appel au constructeur par défaut
    - le second objet (personnage2) fait appel au second constructeur

    je ne sais pas trop comment appeler le premier constructeur pour le premier objet et comment appeler le second constructeur pour le second objet.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 130
    Points : 33 063
    Points
    33 063
    Billets dans le blog
    4
    Par défaut
    Comme on l'a dit plus haut, l'appel aux constructeurs de membres se fiat via la liste d'initialisation.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Comme on l'a dit plus haut, l'appel aux constructeurs de membres se fiat via la liste d'initialisation.
    merci mais pourrais tu me montrer stp comment tu fais sur cet exemple ?

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 130
    Points : 33 063
    Points
    33 063
    Billets dans le blog
    4
    Par défaut
    Tu pourrais lire les réponses qui te sont faîtes : Bretus te donne la syntaxe à recopier dans la première réponse..

    Et la FAQ en parle également.

Discussions similaires

  1. Initialisation statique d'objet avec constructeur
    Par Captain'Flam dans le forum Débuter
    Réponses: 11
    Dernier message: 07/09/2011, 17h42
  2. objet literal et objet avec constructeur
    Par hellalaboy dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/07/2011, 15h31
  3. var_export et les objets avec constructeurs
    Par gomodo dans le forum Langage
    Réponses: 2
    Dernier message: 15/08/2009, 13h04
  4. Probleme avec constructeur surchargé
    Par dr971 dans le forum C++
    Réponses: 3
    Dernier message: 04/04/2007, 12h16
  5. [Constructeur]Pb avec la surcharge d un constructeur
    Par cmoulin dans le forum Langage
    Réponses: 3
    Dernier message: 26/04/2004, 10h29

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