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 :

Appel auto de méthodes sur des methodes virtuelles


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Par défaut Appel auto de méthodes sur des methodes virtuelles
    Bonjour j'aurais besoin d'une méthodologie pour résoudre un petit probleme.
    En fait, je voudrais réaliser une petite classe de sérialisation qui propose 2 méthodes : inserer(ostream&) et extraire(istream&).

    Dans l'ésprit des interfaces java je me suis dis, je vais rendre insere et extraire virtuelle pure pour que le fait d'hériter de ma classe de Serialisation rendre obligatoire le fait de redefinir ces 2 méthodes.

    Mon probleme est que je voudrais que lorsque on appel inserer ou extraire a partir d'une classe fille quelconque du code de ma classe de base Serialisation soit éxécuté automatiquement, un peut comme on peut appeler un constructeur parent a partir d'un constructeur fils...

    Pourriez-vous m'indiquer une façon de faire ?

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Je suis pas sûr d'avoir compris ta question, en gros tu veux appeler la méthode de la classe de base depuis la méthode redéfinie dans la classe dérivée ? Si c'est ça que tu souhaites faire en gros le principe c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //dans le code de la méthode redéfinie "MaMethode" là ou t'en as besoin :
    ClasseMere::MaMethode()
    Sinon une méthode un peu plus élégante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Base {
     
    public:
        void MethodePourLesClients() {
            //Code commun ici;
            MethodSpecific();
        }
     
    protected:
        virtual void MethodeSpecific() =0;
    };
    Et tu redéfinis seulement MethodSpecific, ce qui assure que le code commun sera exécuté à chaque fois qu'un client appelera la méthode, et que tu doives réécrire les parties spécifiques dans chaque classe fille sans te soucier d'appeler le code commun depuis celle-ci.

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    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 Serialization
    {
    public :
     
        void inserer(ostream& os)
        {
            ...
            priv_inserer(os);
        }
     
    private :
     
        virtual void priv_inserer(ostream& os) = 0;
    };

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Par défaut
    Merci pour votre aide, je n'avais pas envisager cette solution mais je préfererais éviter de devoir manipuler dans les classes filles d'autres méthodes que celles que je redéfinie ; à savoir inserer et extraire.

    Ça complique un peu l'histoire n'est ce pas ?

  5. #5
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Pas du tout. Ton code est plus souple.
    Tu as une interface qui demeure la même. Tu appelleras les mêmes fonctions de l'extérieur.
    Cependant, intérieurement ça marche différemment de ce que tu avais prévu.
    Sétipabeau ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Par défaut
    Citation Envoyé par Alp
    Pas du tout. Ton code est plus souple.
    Tu as une interface qui demeure la même. Tu appelleras les mêmes fonctions de l'extérieur.
    Cependant, intérieurement ça marche différemment de ce que tu avais prévu.
    Sétipabeau ?
    Ça serait beau si j'avais une idée de comment faire ça oui ... ^^

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ben c'est le code qu'on t'a montré.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Par défaut
    Citation Envoyé par Laurent Gomila
    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 Serialization
    {
    public :
     
        void inserer(ostream& os)
        {
            ...
            priv_inserer(os);
        }
     
    private :
     
        virtual void priv_inserer(ostream& os) = 0;
    };
    Si il faut redefinir priv_insérer pour utiliser inserer ça n'est pas ce que je veux faire.

  9. #9
    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,

    C'est juste une histoire de nommage...
    Et là comme ça ?
    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
    class MPacker
    {
      public:
        virtual ~MPacker();
     
        bool store(char* s)
        {
          initPacker( s );
          // sans doute des trucs ?
          pack();
          // sans doute d'autres trucs ?
          return ?!
        }
        const char* retrieve()
        {
          // des trucs
          unpack();
          // d'autres trucs
          return ?!
        }
     
      protected:
        virtual void pack()=0;
        virtual void unpack()=0;
     
      private:
        void initPacker(char *);
    };
    MAT.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Par défaut
    Ok merci pour vos réponses effectivement c'est plus clair...
    Vais voir ce que je peux faire comme ça ;-)

Discussions similaires

  1. Appel d'une méthode sur une classe fille
    Par Tipha dans le forum C++
    Réponses: 5
    Dernier message: 29/05/2008, 14h23
  2. appelé une autre méthode problem des érreurs
    Par aefmaaradji84 dans le forum C++/CLI
    Réponses: 2
    Dernier message: 28/07/2007, 22h29
  3. PHP et IIS Problème sur des repertoires virtuels
    Par remi_neo dans le forum IIS
    Réponses: 1
    Dernier message: 30/05/2007, 17h17
  4. des difficultés sur des methodes
    Par bambi98 dans le forum UML
    Réponses: 4
    Dernier message: 12/12/2006, 09h32
  5. Réponses: 2
    Dernier message: 20/10/2006, 15h07

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