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 �prouv� 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
    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 �prouv�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    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
    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 ?

  4. #4
    Membre �prouv� 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
    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 �prouv� 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
    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
    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.

  7. #7
    Membre �prouv� 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
    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, 16h08
  2. R�ponses: 2
    Dernier message: 20/03/2011, 19h37
  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, 07h45
  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, 17h23
  5. fonction renvoi de type personnalis�
    Par Averroes dans le forum VBA Access
    R�ponses: 2
    Dernier message: 10/09/2007, 11h33

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