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 :

Classes virtuelles et méthodes d'accès aux données privées


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 65
    Points : 38
    Points
    38
    Par défaut Classes virtuelles et méthodes d'accès aux données privées
    Bonjour à tous,

    Je dispose d'une classe DA qui contient un constructeur et un destructeur, ainsi que des data en protected :

    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 DA
    {
    public:
      DA();
      DA(char * Name, char * FC, char * TrgOp, char * M_O_C);
      ~DA();
     
    private:
    protected:
      char * DataAttributeName;
      char * FunctionalConstraint;
      char * TrgOp;
      char * M_O_C;
    };
    Ensuite, je dispose d'autres classes (une par type de données en fait) qui récupèrent les data protégées de la classe mère et qui en implémentent une nouvelle pour chacune:
    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
    20
    21
    22
    23
    24
    25
    26
    27
     
    class BOOLEAN_TYPE : public DA
    {
    public:
      BOOLEAN_TYPE();
      BOOLEAN_TYPE(char * Name, char * FC, char * TrgOp, char * M_O_C);
      ~BOOLEAN_TYPE();
     
    private:
      bool Value;
     
    protected:
    };
     
    class ET_IEC_DIRECTIONAL_TYPE : public DA
    {
    public:
      ET_IEC_DIRECTIONAL_TYPE();
      ET_IEC_DIRECTIONAL_TYPE(char * Name, char * FC, char * TrgOp, char * M_O_C);
      ~ET_IEC_DIRECTIONAL_TYPE();
     
    private:
      ET_IEC_DIRECTIONAL Value;
    protected:
    };
     
    /* Beaucoup d'autres ... */
    Mon objectif est de créer à partir de là des fonctions qui permettent d'accéder aux données "Value" de chaque classe fille. L'idéal aurait-été de créer une seule fonction en public dans la classe mère et que toutes les classes filles puissent l'utiliser par héritage. Le problème est que le type de "Value" diffère pour chaque classe fille. Je cherche une solution qui me permette d'éviter de coder une fonction pour chaque type de "Value".

    Quelqu'un connaitrait-il une méthode efficace ?

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 265
    Points : 6 686
    Points
    6 686
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    ce problème est typiquement le genre de choses que l'on résous avec des templates, je te conseille donc de te chercher de ce côté. Ensuite, les détails d'implémentation dépendront des spécificités de ton programme.

    Cordialement.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 65
    Points : 38
    Points
    38
    Par défaut
    Merci pour la réponse, effectivement j'étais passé à côté des templates. Je suis en train de voir comment utiliser cet outil de façon optimale, sachant que je suis confronté à plusieurs problèmes:

    - La première solution serait de définir la classe DA en template. Par contre, l'architecture de mon code est la suivante: Une classe "server" dispose de private data de type "class LD" qui elle même dispose de privata data de type "class LN", ... qui contient des private data de type "class DA". Ainsi, si je déclare DA en template, cela implique que le niveau supérieur soit aussi déclaré en template, puis encore le niveau supérieur, ...

    - La deuxième solution serait d'utiliser une fonction déclarée en template dans la classe DA. La fonction serait qqch comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public:
    template<typename T>
    T GetVal()
    {
      return Value;
    }
    private:
    T Value;
    Bien entendu, le compilateur hurle car il ne connait pas le type T lors de la déclaration de Value. Quelle serait la solution pour corriger ce problème ?

    Julien.

  4. #4
    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 705
    Points
    2 705
    Par défaut
    Citation Envoyé par Khan34 Voir le message
    - La première solution serait de définir la classe DA en template. Par contre, l'architecture de mon code est la suivante: Une classe "server" dispose de private data de type "class LD" qui elle même dispose de privata data de type "class LN", ... qui contient des private data de type "class DA". Ainsi, si je déclare DA en template, cela implique que le niveau supérieur soit aussi déclaré en template, puis encore le niveau supérieur, ...
    Pas si tu définis un pointeur vers nue classe parente qui ne dépend pas de ce type variable. Mais il ne faut que tu aies besoin d'accéder à cette donnée à partir de ce pointeur...

    Pour ta seconde solution, je en comprend pas bien le problème.
    [EDIT BY KOALA01]supprimé car modification effectuée par moi[/EDIT]

    Merci également, dans ton second post, de mettre ton code dans entre balises de code...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 65
    Points : 38
    Points
    38
    Par défaut
    J'ai corrigé les remarques concernant le deuxième post; par contre je n'ai pas pu pour le premier post, je ne peux pas l'éditer (il semblerait qu'il ait été édité par un administrateur préalablement).

    La 2nde solution dont je parlais dans le post précédent permettais d'éviter de créer un template classe et de seulement créer un template fonction qui serait par la suite utilisé dans la classe. Le problème est que la fonction doit renvoyer la donnée défini en private dans chaque classe fille de DA, mais pas dans la classe DA elle même. Donc naturellement le compilateur me dit que la valeur que j'essaye de renvoyer n'est pas définie. J'ai donc définie une variable symbolique dans DA (T value) mais bien entendu, le compilateur me dit qu'il ne connait pas le type T.

  6. #6
    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 705
    Points
    2 705
    Par défaut
    Dans ta classe fille, fais un typedef.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class A { ... };
     
    class B : A
    {
        typedef int titi;
     
        int var;
     
        int getVar() { return var; }
    }
     
    B monInstance;
    B::titi toto = monInstance.getVar();

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

Discussions similaires

  1. Réponses: 225
    Dernier message: 26/04/2018, 17h38
  2. [PHP 5.4] méthode d'acces aux données importées d'un CSV
    Par wimbish dans le forum Langage
    Réponses: 0
    Dernier message: 16/10/2014, 16h08
  3. mvvm ria services, quelle méthode d'accès aux données
    Par Golzinne dans le forum Silverlight
    Réponses: 4
    Dernier message: 01/06/2011, 11h14
  4. Quelle méthode d'accès aux données choisir ?
    Par alex_noox dans le forum Framework .NET
    Réponses: 1
    Dernier message: 10/04/2009, 15h48
  5. [Debutant] Classe d'acces aux données
    Par Keldrhyn dans le forum Access
    Réponses: 4
    Dernier message: 18/02/2007, 20h30

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