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 :

Héritages multiples, appelle d'une fonction commune


Sujet :

C++

  1. #1
    Membre averti Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Points : 358
    Points
    358
    Par défaut Héritages multiples, appelle d'une fonction commune
    Salut !

    J’ai encore une question sur les héritages multiples
    Lorsque l’on créé un objet, les constructeur de l’objet et des class dont il hérite s’exécute !

    J’aimerais savoir si il est possible de faire un truc un peu équivalant avec une fonction, je m’explique :
    Disions qu’on a un class A qui hérite de la class B et de la class C
    Les trois class contienne une fonction f(), et t’il possible que j’exécute toute ces fonctions f() sans donné le nom de class ?

    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
    class B
    {
     
      public :
        void f()
        {
          printf("f() de de class B");
        }
    };
     
    class C
    {
     
      public :
        void f()
        {
          printf("f() de de class C");
        }
    };
     
    ...
     
    class A : public B, public C, ...
    {
     
      public :
        void f()
        {
          B::f();
          C::f();
          ...
     
     
          //j'aimerais ici faire appelle a toute les f() des class que A herite sans utiliser les Nom_Class::f(), car je connais pas forcement tout les class hérité... comment faire ?
        }
    };
    Vous avez une idée ?

    Merci

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    tu ne connais pas forcément toutes les classes héritées ? je vois mal comment ça peut être possible !?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre averti Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Points : 358
    Points
    358
    Par défaut
    Citation Envoyé par Swoög
    tu ne connais pas forcément toutes les classes héritées ? je vois mal comment ça peut être possible !?
    lol oui effectivement je sais que c'est bizarre... en fait je les connais mais... pour que le code soit plus réutilisable facilement, j'aimerais ne pas prendre en compte le nom des class.
    Comme ça qu’elle que soit le nom des fonctions que j'hérite, je n’est pas à modifier mon code ^^

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Points : 171
    Points
    171
    Par défaut
    Si l'on accepte de modifier le prototype de la fonction f(),
    on pourrait passer en paramètre les différentes classes (template).

  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
    On peut sortir des jolis trucs de meta-programmation, mais est-ce que ça en vaut vraiment le coup ?

    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
    40
    41
    42
    43
    44
    #include <iostream>
     
    using namespace std;
     
    struct A {void f() {cout << "f() de A" << endl;}};
    struct B {void f() {cout << "f() de B" << endl;}};
    struct C {void f() {cout << "f() de C" << endl;}};
     
    struct NullList {};
     
    template <typename H, typename T>
    struct TypeList
    {
        typedef H Head;
        typedef T Tail;
    };
     
    template <typename T> struct Caller;
     
    template <typename T1, typename T2>
    struct Caller<TypeList<T1, T2> > : public T1, public Caller<T2>
    {
        void f(){Caller<T2>::f(); T1::f();}
    };
     
    template <>
    struct Caller<NullList>
    {
        void f(){}
    };
     
    #define TYPELIST3(C1, C2, C3) TypeList<C1, TypeList<C2, TypeList<C3, NullList> > >
     
    typedef TYPELIST3(A, B, C) MesTypesDeBase;
     
    struct Derived : public Caller<MesTypesDeBase> {};
     
    int main()
    {
        Derived d;
        d.f();
     
        return 0;
    }
    Après on peut aussi passer en paramètre template la fonction à appeler pour avoir un truc plus flexible.

  6. #6
    Membre averti Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Points : 358
    Points
    358
    Par défaut
    et que pensez vous dans le même genre d'un code style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #define listclass B,C                      // liste des class que A herite, C'EST ICI QUE L'UTILISATION DOIT DEFINIR LES CLASS A HERITER
    #define heritage(a,b) public a, public b   //il faudrais que ici le nombre d'argument de heritage ne soit pas defini ... :^/
    #define appelleF(a,b) a::f(); b::f();      //ici aussi il faudrais que le nombre d'argument ne soi pas defini...
     
    class A : heritage(listclass)
    {
        public :
            void f()
            {
                //appelle de tout les f() des class que A herite
                appelleF(listclass);
            }
    };

  7. #7
    Membre averti Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Points : 358
    Points
    358
    Par défaut
    non, en fait je croie que je vais laisser tomber cette idée, c'est vrai que ça rajoute beaucoup de code pour pas grand chose et la clarté du code source en prend un coup aussi ....

    Merci a tousse pour votre aide !!! =)

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

Discussions similaires

  1. appel d'une fonction à partir d'un popup
    Par villeneuvejsp dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/12/2004, 17h00
  2. Appel d'une fonction
    Par georgeabitbol dans le forum ASP
    Réponses: 4
    Dernier message: 08/07/2004, 14h29
  3. Réponses: 4
    Dernier message: 02/06/2004, 16h35
  4. Appel d'une fonction
    Par jfphan dans le forum ASP
    Réponses: 4
    Dernier message: 14/04/2004, 15h06
  5. A la recherche de l'appel d'une fonction...
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 24/09/2003, 12h34

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