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 :

Constructeur et objet


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut Constructeur et objet
    Bonsoir à tous

    je voudrais quelques explications concernant les codes de programmes suivant, il s'agit de définitions de constructeur (surchargé)à vrai dire je suis quelque peu dérouté en voyant apparaitre des objet et pointeur dans la définition du constructeur.
    Il s'agit de 2 classes, la classe Point et la classe Graphe, N étant le nombre de point du graphe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Graphe::Graphe(Point const *const Plist, const int N)
    {
        iNbPoint=N;
        std::cout << "appel du constructeur graphe" << std::endl;
    };
    de même j'ai une autre surchage de constructeur avec en paramètre un vector et une référence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Graphe::Graphe(std::vector<Point> &Plist )
    {
        for (unsigned int i=0;i<ArrayPoint.size();i++)
            {
                ArrayPoint[i]=Plist[i];
                std::cout << "appel du constructeur graphe par transmission" << std::endl;
            };
    il s'agit d'extrait de mon tp si vous avez besoin de plus d'infos je pourrais éventuellement vous envoyer la totalité du tp

    Merci

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 875
    Par défaut
    En général on apprécie que les gens lisent les règles du forum avant de poster...

    Sinon pour ton problème, sois un peu plus précis : qu'est-ce que tu ne comprends pas ?

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Bonjour,
    juste parce que mes yeux brûlent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Graphe::Graphe(Point const *const Plist, const int N)
    : iNbPoint(N)
    {
        std::cout << "appel du constructeur graphe" << std::endl;
    };

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut OBJET ET POINTEUR
    j'ai du mal à assimiler la présence d'un objet et de pointeur dans le corp du destructeur.
    Mea culpa pour la retranscription du code je ne me suis pas encore familiariser avec les outils proposé sur le ruban.

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 298
    Par défaut
    j'ai du mal à assimiler la présence d'un objet et de pointeur dans le corp du destructeur.
    Je ne vois pas de destructeur. Un destructeur de la classe Graphe serait
    Comme il n'y a pas de tilde, il n'y a pas de destructeur.

    Quel est ton problème?

    PS: Pour faire un objet Salade, on peut utiliser Endives ou Laitue ou Tomates. Pas étonnant qu'il existe plusieurs constructeurs.

  6. #6
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 158
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    qu'est-on sensé trouvé surprenant dans ce code ?
    Un pointeur dans un constructeur ? Et ?
    Pourquoi serait-il interdit pour un objet d'instancier un autre objet ? As-tu déjà entendu parler de composition ? Un design pattern porte même son nom.

    Dans le destructeur ? Idem.
    Sans compter que tu ne montres aucun destructeur.

    Tes constructeurs sont de simples constructeurs avec paramètres. Ni constructeur par défaut, ni par copie.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 050
    Par défaut
    Bonjour,

    Il n'y a rien de très éffrayant la dedans.
    Comme l'a dit leternel, utilise ce que l'on appelle les listes d'initialisations (FAQ) autant que possible. Cela te permets de créer les variables membres de l'objet "avant" l'objet, ce qui évite une affectation de chaque paramètre après l'appelle du constructeur. Tu auras un gain de performance considérable sur le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Graphe::Graphe(Point const *const Plist, const int N)
    : iNbPoint(N)
    {
        std::cout << "appel du constructeur graphe" << std::endl;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Graphe::Graphe(std::vector<Point> &Plist )
    :ArrayPoint(Plist)
    {}
    PS: tu as mis un ";" à la fin de ta boucle for, tu n'en as jamais sauf à la fin de la déclaration d'une classe et pour un do...while;

    j'ai du mal à assimiler la présence d'un objet et de pointeur dans le corp du destructeur.
    Il n'y a rien de magique ou de compliqué. Fais juste très attention au pointeur, car tu dois exactement savoir pourquoi tu passe un pointeur car c'est très dangereux. Imagine ceci:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    class A
    {
        CClasse * m_ptr;
     
    public:
        A()
         :ptr( new CClasse)
        {
        }
     
        ~A()
        {
           delete m_ptr;
        }
    };
    class B
    {
        CClasse * m_ptr;
     
    public:
        B(CClasse * ptr)
         :ptr( ptr)
        {
        }
     
        ~B()
        {
           delete m_ptr;
        }
    };
    Avec ces classes tu auras un gros problème si :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    A * a = new A();
    B * b = new B(A);
    delete A;
    b->m_ptr->foo(); //CRASH car le pointeur à été delete avec A!!
    Une solution pour ça est le shared_ptr.


    Pour la copie du vecteur, le faire avec la liste d'initialisation appellera le constructeur par copie de la classe std::vector qui s'occupe toute seule de faire appelle à la copie des objets dans le même ordre. http://www.cplusplus.com/reference/v...vector/vector/

    EDIT:
    Attention, ligne 7: :ptr( new CClasse)
    Effectivement, Désolé et merci Medinoc

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 401
    Par défaut
    Attention, ligne 7: :ptr( new CClasse)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [Débutant] Classe, Constructeur et objet, une question toute bête
    Par OurPleasure dans le forum C#
    Réponses: 14
    Dernier message: 14/01/2015, 16h11
  2. Constructeur et objet
    Par bouritosse dans le forum Débuter
    Réponses: 10
    Dernier message: 06/10/2014, 00h37
  3. Réponses: 3
    Dernier message: 23/01/2012, 18h34
  4. Constructeur d'objet null
    Par tchoimars dans le forum Windows Forms
    Réponses: 4
    Dernier message: 09/02/2009, 18h47
  5. algorithme constructeur en objet
    Par sicilianadev dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 31/10/2008, 16h10

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