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 :

Les amis de mon père ne sont pas mes amis, pourquoi ?


Sujet :

C++

  1. #1
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut Les amis de mon père ne sont pas mes amis, pourquoi ?
    Une petit question de culture générale de programmation.

    Exemple :
    Soit Ami une class
    Soit Pere une class de base dont dérive Class1, Class2, Class3.
    Pere est ami de Ami. Donc Ami à accès aux parties private et protected de Pere.
    Mais Ami n'est pas ami de Class1, Class2, Class3....
    C'est une étrangeté je trouve....

    Quelqu'un sait-il pourquoi c'est ainsi ?

    Des théories :
    -> Il y a des cas dans le langage ou cela poserai des problèmes, je ne vois pas où.

    -> C'est comme ça et c'est tout.

    -> C'est pour faire comme dans le vraie vie.

    Si vous pouvez m'éclairer. Merci.
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Tu voudrais qu'en déclarant Ami ami de Père, Ami puisse accéder à la partie privée de Class1, Class2, Class3... ?
    C'est plutôt à toi de justifier ce comportement
    Note que Class1 n'a pas accès au private de Père, et inversement.

  3. #3
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Oui mais attention si class 1,2 et 3 ont de nouvelles données qui ne sont pas dans pere il est compréhensible qu'on ne veuille pas que une class Ami même si elle est ami de Pere puisse y acceder.

    EDIT:Ce message vient a la suite du premier!
    Encore une fois je me suis fait griller à 3 secondes prés!
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    2 (longues) minutes, pas 3 secondes

  5. #5
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Je m'explique :
    Je créais pour un moteur de particules des emetteurs...
    Le moteur ne connait pas le type des emetteurs qu'il manipule
    J'ai une class de base pour les emetteurs (virtual pure)
    Une class Engine, le moteur comme vous l'avez deviné.
    L'utilisateur, pour définir un emetteur, dérive la class de base...
    Le moteur pour faire les claculs sur les emetteurs doit-être ami de ces derniers...
    Au début je pensais donc qu'en mettant ma class de base des emetteurs en friend, alors toutes les class dérivées allaient être avoir comme copain le moteur...
    Du coup je suis obligé de mettre en public tout ce dont le moteur doit avoir acces, pour que le moteur puisse acceder aux éléments des emetteurs... même ce qui est dans la class de base...
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Pourquoi tu manipules les types feuilles dans ton moteur ? (puisque tu as une hiérarchie visblement polymorphe)
    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...

  7. #7
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Non, j'utilise le polymorphisme...
    Mais comme l'objet que j'envoie à été dérivé alors l'amitié ne fonctionne plus...
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Tu as un problème de design dans ton moteur, je pense. Tu dois pouvoir le faire différemment.
    Crée des accesseurs virtuels en protected par exemple, ou change l'interface en mettant l'interface elle-même en protected et la partir visible que tu appelles en public, ...

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    L'amitié traduit souvent un mauvais design. Pourquoi en as-tu besoin ?

    Ou autre question : pourquoi créer des membres private pour juste après dire "ben ils sont plus private grâce à friend" ?

  10. #10
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    L'amitié traduit souvent un mauvais design. Pourquoi en as-tu besoin ?
    Je ne suis pas vraiment d'accord, même si c'est effectivement un bruit qui court. L'amitié permet une meilleure encaspsulation. A ce titre, c'est une bonne chose.

    Exemple récent :
    Une classe à verrouiller dans un contexte multithread. Cette classe a une fonction lock et une fonction unlock. Je veux créer un objet qui possède le lock afin de profiter du RAII.

    Si je met mes fonctions lock et unlock publiques, je n'ai aucune assurance que l'utilisateur utilisera le RAII pour verrouiller mon objet.

    Je les met privées, et je déclare mon objet de lock friend de cette classe. Je ne vois pas comment faire aussi bien et aussi encapsulé sans friend.

    Maintenant, il est vrai qu'en général, quand A est friend de B, A et B sont déclarées dans le même .h, car ce sont des classes concues pour travailler étroitement ensemble.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  11. #11
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Tu as un problème de design dans ton moteur, je pense. Tu dois pouvoir le faire différemment.
    Ben en fait, l'utilisateur des emetteurs ne doit pas avoir accès aux données, mais le moteur doit pouvoir y acceder...
    Donc à part l'amitié...
    Je ne vois pas ce qui pose un problème de design...
    Les emetteurs stockent les infos, et le moteur les traite.
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/07/2014, 16h58
  2. Les processus créés par system() ne sont pas arrêtés quand mon service windows stoppe
    Par Glavio dans le forum Programmation et administration système
    Réponses: 6
    Dernier message: 30/04/2012, 22h25
  3. les champs de mon formulaire ne sont pas reconnu
    Par molo1987 dans le forum Langage
    Réponses: 9
    Dernier message: 28/02/2011, 21h25
  4. Callback et g_signal_connect ne sont pas mes amies
    Par PazaiFoG dans le forum GTK+ avec C & C++
    Réponses: 9
    Dernier message: 10/12/2009, 13h09
  5. Réponses: 4
    Dernier message: 08/11/2006, 08h56

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