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 :

[surcharge]changer le type de reotour d'une méthode


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 54
    Par défaut [surcharge]changer le type de reotour d'une méthode
    Bon, voilà.

    J'ai une classe de base arbre_abstrait qui contient une méthode racine dont le type est noeud_abstrait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class arbre_abstrait
    {
        public:
        //...
        noeud_abstrait& racine();
        //...
    }
    Je voudrai pouvoir changer le type de retour de cette méthode comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class arbre_concret
    {
        public:
        //...
        noeud_concret& racine();
        //...
    }
    J'avais pensé utiliser des classes templates pour l'arbre_abstrait, l'arbre concret devenant alors juste un arbre_abstrait<noeud_concret> , mais comme chaque noeud possède une réference vers l'arbre qui le contient, j'arrive à une situation ou je défini un noeud en fonction de son arbre, lequel est défini en fonction de son noeud,lequel est défini en fonction de son arbre, lequel est défini en fonction de son noeud,...

    Qqn a une idée?

  2. #2
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    J'ai pas bien compris, mais peut être que les retours covariants sont ce que tu recherches:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class Base
    {
    public:
        virtual ~Base() {}
     
        virtual Base* Racine() = 0;
    };
     
    class Impl : public Base
    {
        virtual Impl* Racine(); // OK, car Impl dérive de Base
    };

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 54
    Par défaut
    Dans mon cas, c'est plutot qqch du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Noeud_Base;
    class Base
    {
    public:
        virtual ~Base() {}
     
        virtual Noeud_Base* Racine() = 0;
    };
     
    class Noeud_Impl : Noeud_Base;
    class Impl : public Base
    {
        virtual Noeud_Impl * Racine(); // OK, car Impl dérive de Base
    };
    J'ai essayé mais ça a pas l'air de marcher...
    Au fait, je peux trouver ou de la doc sur les retours covariants?

    Sinon j'ai trouvé une solution:
    J'utilise des templates, mais simplement je fait une déclaration d'une classe en faisant un truc du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Noeud_Impl;
    typedef Base<Noeud_Impl> Impl;
     
    class Noeud_Impl : Noeud_Base<Impl>;
    (En réalité, c'est encore un peu plus complexe, mais le principe est là)

    Voilà, et merci pour tout [/code]

  4. #4
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    Salut,

    Je ne sais pas si ca s'applique exactement ici, mais j'ai été confronté à un problème un peu similaire je crois, il y a un bout de temps... Et j'avais fini par utiliser un sorte de "templates recursifs" (http://en.wikipedia.org/wiki/Barton-Nackman)

    Ce qui me donnait quelquechose du genre arbre_abstrait<arbre_concret,type_quelconque>

    C'est un souvenir un peu lointain, mais ça m'avait permis à l'époque de coder un arbre générique, instanciable avec n'importe quel type. Un noeud possédait alors un pointeur vers ses fils (du type de l'arbre concret -> parametre template 1), et un pointeur vers le type parametré (parametre template 2)...

    Voilà, j'espère que ca pourra ptet t'aider

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

Discussions similaires

  1. Impossible de changer le type de données d'une table
    Par flogo2323 dans le forum Modélisation
    Réponses: 6
    Dernier message: 07/06/2011, 11h12
  2. changer le type de composant avec une case a cocher
    Par Txiki dans le forum Composants VCL
    Réponses: 3
    Dernier message: 18/03/2009, 19h29
  3. Changer le type non-primitif d'une variable/pointeur
    Par ttone dans le forum Débuter
    Réponses: 12
    Dernier message: 10/10/2008, 17h16
  4. Réponses: 19
    Dernier message: 12/12/2007, 15h00
  5. Réponses: 3
    Dernier message: 07/02/2006, 13h26

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