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 :

Interrogation sur les interfaces


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 36
    Par défaut Interrogation sur les interfaces
    Je vous soumets ce petit bout de code épuré pour avoir votre avis sur ma façon de faire une interface à un de mes modules.

    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
    28
    29
    30
    31
    32
    33
    34
    35
    // Classes du module
    struct A
    {
        void f(){}
    };
     
    struct B
    {
        void g(){}
    };
     
    // Classe interface
    class IAB
    {
        private:
            struct A& a;
            struct B& b;
     
        public:
            IAB(A& aa, B& bb) : a(aa), b(bb) {}
     
            void do_thing() { a.f(); }
            void do_another_thing() { b.g(); }
    };
     
    // Exemple d'utilisation
    int main()
    {
        A a;
        B b;
        IAB interface(a, b);
     
        interface.do_thing();
        interface.do_another_thing();
    }
    N'hésitez à me dire si on peut mieux faire.
    Merci,

  2. #2
    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
    Salut

    Ce n'est pas mal, mais attention avec les références membres ! Il y a des cas où elles risquent de plus t'embêter qu'autre chose.

    Exemple :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include <iostream>
     
    // Classes du module
    struct A
    {
    	A() : v(5) {}
    	void f(){ std::cout << v << std::endl; }
    	int v;
    };
     
    struct B
    {
        void g(){}
    };
     
    // Classe interface
    class IAB
    {
        private:
            struct A& a;
            struct B& b;
     
        public:
            IAB(A& aa, B& bb) : a(aa), b(bb) {}
     
            void do_thing() { a.f(); }
            void do_another_thing() { b.g(); }
    };
     
    // Exemple d'utilisation
    int main()
    {
    	A * pA = new A();
    	IAB interface2(*pA, B());
    	delete pA;
    	interface2.do_thing();
     
    	return 0;
    }
    Ce code affiche une valeur indéterminée car pA a été détruit. Une des références devient invalide, mais le code peut (c'est le cas quand j'ai testé) s'exécuter sans générer d'erreur.

    Tu peux aussi utiliser :
    - des copies des structs en question.
    - un pointeur membre
    - un boost::shared_ptr membre si tu fais une allocation dynamique

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 36
    Par défaut
    Merci pour ta réponse.

    Tu peux aussi utiliser :
    - des copies des structs en question.
    - un pointeur membre
    - un boost::shared_ptr membre si tu fais une allocation dynamique
    Les classes du module sont un peu plus volumineuses que celles présentées (ce sont des classes complètes avec membres et fonctions membres, j'ai mis struct contenant une fonction pour simplifier), donc la première suggestion ne convient pas.

    Je me méfie des pointeurs nus, et je n'utilise pas boost pour ce projet...

    Ah oui, j'ai oubliais le return de main !

  4. #4
    Membre Expert

    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
    Par défaut
    Salut,

    En général on appelle plutôt ça une façade (le design pattern).

    MAT.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 36
    Par défaut
    Citation Envoyé par Mat007 Voir le message
    Salut,

    En général on appelle plutôt ça une façade (le design pattern).

    MAT.
    Oui, merci pour cette précision.

    Pourrait-on m'éclairer sur les classes interface du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class A
    {
        virtual void f()=0;
    };
    Ce sont des classes qu'il faut dériver pour définir une implémentation ?
    Un exemple d'utilisation m'aiderai certainement à mieux comprendre...

  6. #6
    Membre Expert

    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

Discussions similaires

  1. Les tutoriels en français sur les Interfaces Graphiques
    Par Jerome Briot dans le forum Interfaces Graphiques
    Réponses: 0
    Dernier message: 04/09/2007, 21h44
  2. Question sur les interfaces (consturcteur property)
    Par BenoitM dans le forum VB.NET
    Réponses: 4
    Dernier message: 01/03/2007, 15h49
  3. Interrogation sur les frames d'animation
    Par franc82 dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 23/11/2006, 18h40
  4. [POO] question sur les interfaces
    Par root76 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 20/05/2006, 17h12
  5. Petite interrogation sur les z-index et div
    Par Delphy113 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/02/2006, 21h09

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