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 :

Souci de renvoi de type


Sujet :

C++

  1. #1
    Membre habitué Avatar de Xtrem_Voyageur
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2009
    Messages : 85
    Points : 154
    Points
    154
    Par défaut Souci de renvoi de type
    Bonjour à tous!

    J'ai un petit souci pour un exercice du Stroustrup :
    Il faut reprendre une structure simple que je vous donne après et en faire une classe pour que chaque membre de l'union soit toujours utilisé correctement en fonction de son type.
    Voici la structure donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    enum Type {S, I};
     
    struct Entry{
    char* name;
    Type t;
    union {
    char* s; // utilise s si t==S
    int i;      // utilise i si t==I
    }
    };
    Je pensais donc en faire une classe et jouer avec les spécificateurs d'accès public et private.
    Et notamment fournir 2 membres d'accès private de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private:
    char* getS();
    int getI();
    et fournir un membre public get() qui soit capable en fonction du type t de l'enum d'appeler le membre privé qui convient.
    Malheureusement, je ne peux pas fournir un type de retour correct à ce membre public et je n'ai aucune idée de comment parvenir à faire l'exercice.

    Un petit coup de main serait loin d'être de trop.

    Merci

    P.S. : je précise que cet exercice intervient dans le libre avec le chapitre sur les modèles et que cela présuppose donc qu'il ne faut pas les utiliser.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Citation Envoyé par Xtrem_Voyageur Voir le message
    Voici la structure donnée :
    Une indentation correcte encouragerait certainement les gens à lire plus volontiers ton post.

    Citation Envoyé par Xtrem_Voyageur Voir le message
    et fournir un membre public get() qui soit capable en fonction du type t de l'enum d'appeler le membre privé qui convient.
    Malheureusement, je ne peux pas fournir un type de retour correct à ce membre public et je n'ai aucune idée de comment parvenir à faire l'exercice.
    Mets la valeur de retour en argument sous forme de référence.

    Citation Envoyé par Xtrem_Voyageur Voir le message
    P.S. : je précise que cet exercice intervient dans le libre avec le chapitre sur les modèles
    Ne manquerait-il pas un mot ?

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Tu es un peu dur oodini, l'OP a assez bien rédigé son post quand même.

    Citation Envoyé par oodini Voir le message
    Mets la valeur de retour en argument sous forme de référence.
    Ca ne résoud pas le problème du tout ! Voir mon post d'après

    Pour moi il y a plusieurs solutions :
    - Les templates mais j'imagine que l'exercice ne t'y donne pas droit.
    - Tu fais de la structure une classe Entry avec les membres en protected et un constructeur en protected qui prend en entrée le type choisi. Ensuite, tu crées deux classes qui héritent publiquement de Entry : EntryS et EntryI, dont le constructeur public par défaut appelle le constructeur de Entry avec la bonne valeur du type. Il ne reste plus qu'à mettre un get dans chaque spécialisation. Tu veux un exemple où c'est clair ?
    Find me on github

  4. #4
    Membre habitué Avatar de Xtrem_Voyageur
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2009
    Messages : 85
    Points : 154
    Points
    154
    Par défaut
    Une indentation correcte encouragerait certainement les gens à lire plus volontiers ton post.
    La structure est si petite que je ne pense pas qu'elle pose de problèmes de lisibilité.

    Mets la valeur de retour en argument sous forme de référence.
    Comme le dit jblecanard, ça ne résout rien en plus de dénaturer le rôle d'un simple accesseur.

    Ne manquerait-il pas un mot ?
    Plutôt des mots en trop (Enlever 'le libre avec'). Désolé pour cette inattention de ma part.

    Merci Jblecanard, je ne pense pas que l'héritage soit autorisé. La classe Entry se doit de rester un type purement concret. A ce niveau du livre, aucun des mécanismes de la POO, ni de programmation générique ne sont autorisés.

  5. #5
    Membre habitué Avatar de Xtrem_Voyageur
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2009
    Messages : 85
    Points : 154
    Points
    154
    Par défaut
    J'ai pensé, mais corrigez moi si je dis une énormité, que l'adresse pour stocker le membre de l'union est la même que cela soit un int ou un char*. Ne serait-il pas possible de récupérer cette adresse, d'y accéder et de lire ce qu'elle contient à l'aide d'un reinterpret_cast ou quelque chose de ce type?

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par oodini Voir le message
    Mets la valeur de retour en argument sous forme de référence.
    Je retire ce que j'ai dit. J'avais lu un peu vite. En fait c'est une bonne idée. Tu peux faire un get(char *& oChar) et un get(int& oInt). Et tu peux lancer une exception si l'un des deux est utilisé alors qu'il ne le devrait pas à cause de la valeur du type t.
    Find me on github

  7. #7
    Membre habitué Avatar de Xtrem_Voyageur
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2009
    Messages : 85
    Points : 154
    Points
    154
    Par défaut
    Non, cela ne correspond pas a ce que j'attendais. Mais il me semble qu'il soit impossible d'obtenir ce que je souhaite sans utiliser des mécanismes tel que l'héritage et la programmation generique.
    Merci a tous les deux de m'avoir répondu!

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

Discussions similaires

  1. fonction qui renvoie le type d'une variable
    Par dgwabo dans le forum C++
    Réponses: 6
    Dernier message: 31/03/2011, 17h08
  2. Réponses: 2
    Dernier message: 20/03/2011, 20h37
  3. [ODBC] SQLColAttribute me renvoi un type inconnu pour un count*
    Par elekis dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 09/12/2008, 08h45
  4. Souci avec le input type='hidden'
    Par Tyrael62 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 02/07/2008, 18h23
  5. fonction renvoi de type personnalisé
    Par Averroes dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/09/2007, 12h33

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