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 :

Références croisées et retour covariant


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Par défaut Références croisées et retour covariant
    Bonjour,
    J'ai un problème pour effectuer une surcharge de fonction avec type de retour covariant en utilisant des déclarations anticipées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class C;
    class D : public C;
    
    class A
    {
        C* f();
    };
    
    class B : public A
    {
        D* f();
    };
    En utilisant le code précédant je voudrais pouvoir écrire la ligne en rouge pour dire au compilateur que la classe D hérite de C et ainsi utiliser la covariance pour les types de retour de f(). Le problème c'est que le compilateur n'accepte pas cette déclaration et si je déclare juste class D; en déclaration anticipé la covariance ne fonctionne plus car le compilateur ne sait pas que D hérite de C. Je voudrais savoir s'il existe un autre moyen pour faire fonctionner ce type de schéma.

    Merci.

    Edit : Oui effectivement j'ai fait une erreur en recopiant, c'est bien des pointeurs pour le type de retour.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Le retour covariant ne fonctionne qu'avec du retour par référence ou pointeur.

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Et cela pose un problème d'inclure D.h dans B.h ?

  4. #4
    Membre habitué
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Par défaut
    En fait c'est juste un programme pour faire des test sur la covariance donc ce qu'il y a dans D et dans B importe peu. Ce qui compte c'est de voir si on peu retourner un objet de type D en utilisant la covariance et les déclarations anticipées. De plus dans B on peu avoir une collection d'objets de classe D et c'est vraiment le retour de l'objet D en tant que tel qui est utile.

    Mais bon en utilisant les déclaration anticipées ça a pas l'air d'être possible de déclarer l'héritage donc pour la covariance ça risque d'être difficile. En Java par exemple c'est beaucoup plus simple à réaliser car on à pas besoin d'utiliser les déclaration de classes anticipées.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Disons qu'à partir du moment où tu as besoin d'une quelconque information sur la classe, il faut inclure sa définition. La déclaration anticipée ça ne va pas plus loin que dire au compilo que la classe existe.

  6. #6
    Membre habitué
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Par défaut
    Effectivement si on peu pas inclure des informations d'héritage dans les déclarations anticipées, l'utilisation des type de retour covariants dans ce cas là ne doit pas être possible. C'est dommage tout de même cette obligation de déclaration anticipées (même si en pratique des cas comme celui là ne doivent pas être très fréquents ^^).
    Pour résoudre mon problème je retourne directement le type général (class C) puis je cast après vers le bon type, c'est un peu plus lourd à gérer mais ça fonctionne.
    Merci d'avoir répondu à ma question.

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

Discussions similaires

  1. Problème de retour covariant
    Par bountykiller dans le forum C++
    Réponses: 4
    Dernier message: 02/11/2006, 00h41
  2. effacer des références croisées
    Par jan0 dans le forum Oracle
    Réponses: 3
    Dernier message: 12/10/2006, 11h09
  3. Références croisées d'objets Oracle
    Par cdemedei dans le forum Oracle
    Réponses: 2
    Dernier message: 23/02/2006, 16h33
  4. [VC++] Comment autoriser les retours covariants ?
    Par Yellowmat dans le forum MFC
    Réponses: 1
    Dernier message: 28/11/2005, 11h46
  5. Retour covariant : Copie de this.
    Par Zenol dans le forum C++
    Réponses: 24
    Dernier message: 27/10/2005, 23h13

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