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 :

Construction d'un objet dans une classe virtuelle pure


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    geong
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : geong

    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Points : 15
    Points
    15
    Par défaut Construction d'un objet dans une classe virtuelle pure
    Bonjour,

    J'essaie actuellement d’implémenter une bibliothèque mathématique pour un de mes projets.

    J'ai donc commencé avec la classe Ensemble que j'ai définie comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Set
    {
    public:
    	Set& union(Set&);
    	virtual bool contains(Element e) = 0;
    };
    Où la fonction union renvoie l'union des deux ensembles, à savoir un ensemble dont la fonction contains vérifie que l'élément e se trouve bien dans un des deux ensembles donnés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class SetUnion : public Set
    {
    private:
    	Set &set1,&set2;
    public:
    	SetUnion(Set&,Set&);
    	virtual bool contains(Element);
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SetUnion::SetUnion(Set& s1,Set& s2):set1(s1),set2(s2){}
    bool SetUnion::contains(Element e)
    {
    	return set1.contains(e) || set2.contains(e);
    }
    Jusque là tout va bien mais après je dois implémenter la fonction Set::union... Et là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Set& Set::union(Set& s)
    {
    	return SetUnion(*this,s);
    }
    Mais là ça coince car le l'objet duquel je vais retourner la référence va être détruit et la référence ne sera plus valide (le compilateur émet aussi une erreur de compilation).

    Maintenant ce que je voudrais savoir c'est comment implémenter ceci (si possible sans pointeur) parce que là je n'ai aucune idée.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je me demande si le compilateur ne vous renvoie pas une erreur, car vous utilisez "union", un mot clé du langage ?

    Pour régler le soucis de la variable de retour, qui est une référence invalide, vous pouvez changer le prototype de la fonction afin qu'elle accepte retourne un unique_ptr. Ainsi, vous retournerez bien un élément (alloué dynamiquement certes), mais valide, tant que vous gardez une référence dessus.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre à l'essai
    Homme Profil pro
    geong
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : geong

    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Points : 15
    Points
    15
    Par défaut
    Concernant l'union c'est juste que j'ai extrait une partie de ,on code et j'ai renommé quelques fonctions et j'ai pas pensé au conflit avec le mot-clé.

    Ensuite, je n'avais pas pensé aux pointeurs intelligents qui sont ce qui se rapproche le plus de ce que je cherchais. Il faudrait que je m'intéresse un peu plus au c++11.

    Merci beaucoup

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    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 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Cela dit, il y a std::set, et les fonctions ensemblistes de <algorithm>, tel que set_difference...

    Tu pourrais peut-être wrapper le tout, par exemple avec le set en héritage privé.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

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

Discussions similaires

  1. Ajout d'un objet dans une classe
    Par Zorgloub dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/01/2008, 11h16
  2. [POO] Un objet dans une classe
    Par Arnich dans le forum Langage
    Réponses: 6
    Dernier message: 25/11/2007, 22h46
  3. list d'objet dans une classe
    Par wadcyr8_197 dans le forum C++
    Réponses: 10
    Dernier message: 04/07/2007, 15h34
  4. Réponses: 8
    Dernier message: 12/04/2007, 11h32
  5. [POO] import d'objet dans une classe
    Par wdionysos dans le forum Langage
    Réponses: 3
    Dernier message: 01/04/2006, 21h05

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