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 :

fonction générique pour get set et change


Sujet :

C++

  1. #1
    Membre habitué Avatar de tretsois
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 181
    Points : 196
    Points
    196
    Par défaut fonction générique pour get set et change
    Bonjour,
    J'ai besoin de créer une classe contenant un grand nombre de variable privées.
    Et je voudrais n'avoir que trois fonctions ( set get change ) pour les manipuler.
    du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class maClasse{
    public:
       void SetField( const std::string theField, std::string theValue)
       {
           this->theField=theValue;
       };
       std::string GetField( const std::string theField ) const
       {
            return this->theField;
       };
       void ChangeField(const std::string theField, std::string theNewValue)
       {
          SetField(theField,theNewValue);
       };
    private:
       std::string champs1;
       std::string champs2;
       std::string champs3; 
    }
    Je butte sur l'acces this->theField ; j'ai tenté différente méthode avec ou sans initialisation mais aucun résultat.
    Je suis ouvert a toute les propositions car ma classe contiendra environ 12 variables ( de type int et string ), trois tableaux de int deux de char et 3 de string ( je pense que j'utilisearais des template pour les tableaux).
    Avoir ces trois fonctions dans ma classe serais un plus pour limiter les lignes de code inutiles et récurentes.
    Cette classe sera utilisé par un composant graphique.
    la vie est belle

  2. #2
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Si tu veux donner des noms à tes variables (ie. associer des valeurs à des chaînes de caractères), tu peux utiliser std::map<std::string, ...>.

    Mais si c'est uniquement pour t'économiser des lignes de code, tu devrais oublier (cette solution en tout cas).

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Pourquoi pas plutôt une classe par donnée et utiliser des templates ?

    MAT.

  4. #4
    Membre habitué Avatar de tretsois
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 181
    Points : 196
    Points
    196
    Par défaut
    Bonjour Laurent et Mat007,
    Mat007-> Multiplier les classes , je ne penses pas que ce soit judicieux car l'objet défini dans la classe sera apellé pour avoir une représentation graphic ( widget Qt ); imagines tu la gestion des fichiers et les modifications?
    Laurent -> je ne suis pas informaticiens à la base et je pense me noyer avec std::map , mais je regarderais cette solution ( pour apprendre )

    Est-ce que la multiplication des fonctions simple sera gourmande en terme de mémoire et de performance ?
    la vie est belle

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    je pense me noyer avec std::map
    Non ne t'inquiète pas, y a vraiment pas de quoi se noyer avec ça
    C'est juste une table associative, qui te permettra d'écrire des trucs de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::map<std::string, int> params;
     
    params["truc"] = 5;
    params["machin"] = 24;
     
    DoSomething(params["truc"], params["machin"]);
    Simple curiosité, quel est le but de tout ça ?

  6. #6
    Membre habitué Avatar de tretsois
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 181
    Points : 196
    Points
    196
    Par défaut
    J'ai regardé comment employer std::map et ce n'est pas ce que je recherche ( ou j'ai rien compris ce qui est plus probable :p mais j'y reviendrais pour comprendre ).
    En fait je veux pouvoir créer objet, remplir les différents champs, et au besoin pouvoir les modifier ( que ce soit en mode console ou graphique ).
    J'ai essayé l'emploie d'une structure mais au final j'ai autant de fonctions qu'avec une classe.
    la vie est belle

  7. #7
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il faudrait commencer par bien cerner ce que tu veux faire réellement (pour ça que je t'ai précédemment demandé le but de ces manips).

    Si tu veux une classe (ou structure, c'est pareil) qui contient des paramètres que tu veux pouvoir lire / écrire sans aucune contrainte, alors mets-les simplement en accès publique sans t'embêter avec 30 accesseurs.

    Si tu veux une classe qui contient des paramètres nommés (ie. accédés d'après un identifiant sous forme de chaîne de caractères) alors il faudra passer par une table associative (std::map).

    Si ce que tu veux c'est juste économiser l'écriture de quelques accesseurs parce que tu as beaucoup de données membres, alors... oublie ça et écrit les accesseurs ; l'économie de code c'est bien seulement lorsque ça profite au code, pas lorsque ça lui impose des choses inutiles.

  8. #8
    Membre habitué Avatar de tretsois
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 181
    Points : 196
    Points
    196
    Par défaut
    Ce que je voulais c'est juste économiser des lignes d'ecriture, donc j'ai commencé à écrires les accesseurs.
    Si tu as un lien vers un tutoriel ou un cours sur std::map je suis preneur ( compréhensible par le commun des mortels ) je suis preneur.
    Cependant je laisse pendant cette semaine le sujet ouvert si une personne à une solution car je ne pense pas être le premier a butter sur un tel os .
    la vie est belle

  9. #9
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Je me répète, mais si tes accesseurs ne servent qu'à fournir un accès en lecture / écriture à tes données privées, sans effet de bord, alors c'est que ce sont en fait des données publiques. Et à mon avis tu es dans ce cas

  10. #10
    Membre habitué Avatar de tretsois
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 181
    Points : 196
    Points
    196
    Par défaut
    Tu ne te répètes pas mais comme tu ne connais pas les détails ta réflexion est tout à fait justifiée et je dirais que vu l'utilisation que je demande ce serais la bonne solution.
    Cependant cette classe aura des classes dérivées qui ne devront pas pouvoir modifier les variables ( merci tout de même les tableaux et certaines variables passeront en protégé et publiques ); ces classes dérivées ne devront pas modifier les variables privées la dessus je penses que celles qui restent sont à leur place en privées. De plus je pense que cette classe sera utilisé en librairie ( externe ) c'est pour celà que j'essais de laisser le moins de variables accessible (je suis contient que ce n'est pas tres compatible avec un widget ).
    la vie est belle

Discussions similaires

  1. Réponses: 9
    Dernier message: 17/09/2013, 11h59
  2. Fonction générique pour conversion bdd/c#
    Par jbrasselet dans le forum C#
    Réponses: 5
    Dernier message: 28/09/2011, 13h32
  3. Fonction générique pour valider les champs d'un formulaire quelconque
    Par dark_vidor dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/01/2009, 01h34
  4. [AJAX] [vos avis] fonction "générique" pour les requetes
    Par gorgonite dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/07/2007, 19h40
  5. [VB.Net] fonctions génériques pour le new
    Par ohcysp dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/09/2006, 11h47

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