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 :

Interdire l'utilisation d'une méthode par une classe fille


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 96
    Par défaut Interdire l'utilisation d'une méthode par une classe fille
    Bonjour

    Soit la classe-mère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class mere {
     
      public :
           f1(mere m){  }
           f2(mere m){  }
     
    }
    … et les classes « fille1 » et « fille2 », filles de m :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class fille1 public m {
     
    public:
       f1(fille1 f) {}
    }
     
    class fille2 public m {
     
    public:
       f2(fille2 f) {}
    }
    Le seul moyen pour que fille1 n'utilise que la fonction f2 et que fille2 n'utilise que la fonction f1 est-il de redéfinir dans fille1 « f1 » et dans fille2 « f2 » ? Tout en laissant f1 et f2 utilisables par la classe-mère ainsi que f2 par les objets de type fille1 et f1 par les objet de type fille2.

    D'avance merci.

  2. #2
    Membre régulier
    Homme Profil pro
    post-doc
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : post-doc
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Par défaut
    Dans ce cas là vaux mieux déclarer f1 dans fille 1 et f2 dans fille 2 tout en déclarant la classe merre comme une classe amie des classes fille1 et fille 2.

  3. #3
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Ton héritage public ne modélise pas le LSP.
    Cela sent l'erreur de conception à plein nez.
    D'où te vient ce besoin ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Je suis d'accord avec Luc. C'est chercher à violer le LSP et donc ça sent un gros problème de conception. Cf F.A.Q. Pourquoi mettre en œuvre un héritage ?

    Et comment ta classe fille1 (ou fille2) va réagir dans ce genre d'utilisation :
    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
     
    void do_something(mere &m_)
    {
       m_.f1(fille1());
       m_.f1(fille2());
       m_.f1(mere());
     
       m_.f2(fille1());
       m_.f2(fille2());
       m_.f2(mere());
    }
     
    int main()
    {
       fille1 f1;
       fille2 f2;
       do_something(f1);
       do_something(f2);
    }
    Est-tu sûr de vouloir faire un héritage publique ???

Discussions similaires

  1. Utiliser une méthode d'une instance, dans une callback
    Par qdaemon_fr dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2014, 18h09
  2. Réponses: 4
    Dernier message: 31/10/2007, 20h27
  3. Réponses: 1
    Dernier message: 28/09/2007, 15h59
  4. Réponses: 11
    Dernier message: 05/10/2006, 13h20
  5. "ajouter une méthode dans une méthode"
    Par Zorgloub dans le forum Langage
    Réponses: 1
    Dernier message: 09/04/2006, 12h53

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