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 :

Interface sans virtualisation ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Septembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 73
    Par défaut Interface sans virtualisation ?
    Bonjour,

    J'aimerais savoir si il est possible de s'assurer qu'une classe ait un certain ensemble de fonctions, sans avoir recours à la virtualisation.

    Par exemple voici une interface très simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct Interface {
     
    //Constructeur...
    //Destructeur..
        void fonctionA();
        void fonctionB();
     
    };
    J'aimerais m'assurer qu'une classe Implementation (ou Implementation2, Implementation3) ait bien une fonctionA et une fonctionB implémenté.

    Je définie si j'utilise Implementation2 ou Implementation3 lors de la compilation.
    Je voudrais éviter l'héritage avec des fonctions virtuelles simplement parce que ça n'aurait pas de sens dans mon programme d'avoir un objet abstrait de type Interface. Cela permettrait d'éviter les résolutions dynamiques des fonctions virtuelles.

    Je pose la question surtout par curiosité.

    Merci.

  2. #2
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Pour ce que j'ai lu la notion d'interface telle que tu la perçois n'existe pas vraiment en C++, on la retrouve par contre en Java (qui est là pour pallier au manque d'héritage multique si je dis pas de bêtises).
    Donc non tu ne pourras pas passer par autre chose que l'héritage d'une class de fonctions non implémentées.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Par défaut
    Bonjour,

    Je comprend pas trop la question

    Mais je vais essayer de t'éclairer sur les interfaces et les méthodes virtuel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class maman
    {
    public:
        virtual int method();
    }
     
    class fille : public maman
    {
    public:
       int method();
    }
    Dans ce cas tu implémente les 2 méthodes.
    Si la méthode n'est pas ajouté à ta classe fille alors quadn tu vaux utiliser ta classe fille c'est la méthode de maman qui va être éxecuté.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class maman
    {
    public:
        virtual int method()=0;
    }
     
    class fille : public maman
    {
    public:
       int method();
    }
    Dans ce cas tu dois implementer la methode dans la classe fille.
    Tu vas manipuler des type maman et c'est la methode fille qui va être executé.

    Si ça n'a rien a voir avec ça, alors c'est dépendant de ta conception et dans ce cas c'est a toi d'avoir la rigueur pour implémenter les méthodes que tu désire.

    Si je ne suis pas clair, n'hésite pas à poser plus de questions.

  4. #4
    screetch
    Invité(e)
    Par défaut
    tu peux utiliser les templates

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    template< typename T >
    struct ImplementationForward
    {
        void fonctionA() { return T::fonctionA(); }
        void fonctionB() { return T::fonctionB(); }
    };
    ImplementationForward< Implementation2 > impl;
    // compile seulement si Implementation2 fournit fonctionA et fonctionB.

  5. #5
    Membre actif
    Inscrit en
    Septembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 73
    Par défaut
    Merci à tous pour toutes ces informations.

    Du coup je vais utiliser la solution des templates comme screetch le propose.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Comme Screetch l'indique, la seule solution c'est le template.
    Si l'objet template ne possède pas la fonction, la compilation échouera.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. Outil pour les interfaces sans passer par le code
    Par barchoui dans le forum Dreamweaver
    Réponses: 2
    Dernier message: 13/01/2009, 14h12
  2. Interface sans JFrame
    Par moomba dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 07/08/2008, 16h20
  3. Création d'interface sans Flash MX
    Par wikers dans le forum Flash
    Réponses: 2
    Dernier message: 11/06/2006, 13h44
  4. Relancer l'interface sans quitter
    Par DefmY dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 23/05/2006, 15h27
  5. Réponses: 1
    Dernier message: 03/03/2004, 08h58

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