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 :

Confusion avec les friends/protected etc...


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Par défaut Confusion avec les friends/protected etc...
    Bonjour, je suis un peu confu avec les friends et protected. J'ai consulter la FAQ mais je ne suis pas vraiment plus lucide sur le sujet.


    Ce que j'aimerais faire c'est, sans héritage, permettre à une classe X et seulement à une classe X d'accéder au vecteur NOEUD présent dans la classe Y.

    Que faire? J'suis tout mêlé!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class Y {
     friend class X;
     public:
       ...
     protected:
       std::vector<double> noeud;
    };
     
    class X {
     ...
     objetY.noeud.clear();
    }

  2. #2
    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 : 50
    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
    Par défaut
    Protected n'a vraiment de sens en C++ qu'en cas d'héritage. Autant mettre privé.

    Autrement, avec friend, tu peux accèder à tout de la classe, que ce soit public, protégé ou privé. Quand tu as un ami, en C++, non seulement tu lui présentes ta copine, mais en plus, tu la lui présentes à poil, et il peut même toucher si il veut. Tu as intérêt à bien choisir tes amis, afins qu'ils n'abusent pas de la liberté qui leur est faite.
    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.

  3. #3
    Membre éclairé Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Par défaut
    Si je le met privé j'y aurai accès en étant friend?

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Oui, c'est le but.

  5. #5
    Membre éclairé Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Par défaut
    Merci de l'éclaircicement, notre prof avait été asser bref sur ce sujet

  6. #6
    Membre éclairé Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Par défaut
    J'ignore pourquoi mais je ne peux accéder a mon vecteur privé....


    J'ai pourtant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class GL_MAILLAGE : public wxGLCanvas 
    {
     friend class MyFrame;
     public:  
        GL_MAILLAGE( wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = wxT("GLCanvas"));
     
        ~GL_MAILLAGE(); 
     
     private:
        std::vector<std::vector<double> > coord_noeuds;
        ...

    et dans une fonction de la classe MyFrame j'essaie de faire un push_back dans coord_noeuds mais il me dit

    157 E:\magic\VMM\unix_interface\interface.cpp `coord_noeuds' undeclared (first use this function)

  7. #7
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    Citation Envoyé par vdumont
    ...
    et dans une fonction de la classe MyFrame j'essaie de faire un push_back dans coord_noeuds mais il me dit

    157 E:\magic\VMM\unix_interface\interface.cpp `coord_noeuds' undeclared (first use this function)
    tu précises à MyFrame l'instance de GL_MAILLAGE à laquelle appartient le vecteur ?

  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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Et tu as mis le header qui va bien ?

  9. #9
    Membre éclairé Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Par défaut
    Ok en utilisant


    m_glcanvas->coord_noeuds au lieu de m_glcanvas.coord-noeuds ca fonctionne, mais quelqu'un peut m'expliquer dans quel cas il faut utiliser -> et dans quel cas il faut utiliser le point?

  10. #10
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    -> pour un pointeur
    . pour une instance de classe

  11. #11
    Membre éclairé Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Par défaut
    Mais mon objet est pourtant déclaré comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_glcanvas =  new GL_MAILLAGE(this, wxID_ANY, wxDefaultPosition, sizeGlCanvas);

  12. #12
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    new... = pointeur

    regarde la déclaration de ta variable: soit tu as un "type*", soit tu as un "ptype" dont la définition est "#define ptype type*"

  13. #13
    Membre éclairé Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Par défaut
    Merci

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

Discussions similaires

  1. confusion avec directives top, left, etc
    Par awalter1 dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 01/03/2012, 10h47
  2. [Débutant] Contourf d'une matrice avec les xmin xmax etc
    Par yonafunu dans le forum MATLAB
    Réponses: 2
    Dernier message: 31/05/2011, 17h51
  3. Problème avec les friendly name
    Par samus535 dans le forum SSAS
    Réponses: 1
    Dernier message: 11/11/2008, 16h33
  4. Problème avec les friends
    Par dot-_-net dans le forum C++
    Réponses: 3
    Dernier message: 19/05/2008, 12h08
  5. Confusion avec les références
    Par vdumont dans le forum C++
    Réponses: 20
    Dernier message: 03/05/2006, 16h56

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