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 classes en c++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de colocolo
    Inscrit en
    Février 2007
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 166
    Par défaut les classes en c++
    salut;

    j'ai une classes GRAPH
    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
     
     
    class Graph {
     
    public:
      int ma[10][10];
      int nb;
     
     
     
      Graph (int );
      int ajouter_sommet();
      void retirer_sommet();
      void ajouter_arc();
      void retirer_arc();
      void Afficher();
      void Succ();
    };
    je veux utilser l'attribut nb de cette classe dans une autre classe
    comment je fait?

    merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Avec "."

  3. #3
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Octobre 2007
    Messages : 285
    Par défaut
    Avec "."
    "...." ?
    Tout dépend de la fonctionnalité de la classe qui a besoin de Nb de graph.
    Soit CMaclasse qui à besoin de connaître Nb.

    1 1ère solution : Graph est un objet de CMaclasse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class CMaclasse
    {
    public:
      Graph m_mongraph;
      int m_unentierpourlasolution2;
     
    public:
      void unefonction();
    }
    dans la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void CMaclasse::unefonction()
    {
      // On utilise Nb de Graph avec :
      int unentier = mongraph.nb;
    }
    1 2ème solution : Graph et CMaclasse appartienne à une troisième classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class CTroisiemeClasse
    {
    public:
      Graph m_mongraph;
      CMaclasse m_maclasse;
     
    public:
      void unefonction3emeclasse();
    }
    dans la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void CTroisiemeClasse::unefonction3emeclasse()
    {
      // On utilise Nb de Graph avec :
      m_maclasse.unentierpourlasolution2 = mongraph.nb;
    }
    Il y a 50 manières de transmettre une valeur d'une classe à l'autre. Dans les deux exemples précédent, c'est vraiment la base.
    On peut rajouter et rendre plus propre avec attributs privés, transmission par référence, déclaration dynamique... Toute la puissance de C++ bref.

    Donne nous plus d'infos (contexte...)
    Puis vas te ballader sur les tutos... pleins de choses interressante pour apprendre le C++.

  4. #4
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Bonjour!

    Je ne sait pas si j'ai très bien cerné ton porblème mais pour passer une varibale d'une classe a une autre étant donné que ton nb est public sa ne devrai pas être is compliqué.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int get_nb(){
    return nb;}
     
    //ou tout simplement
     
    Classenécessitant.var1 = graph.nb
     
    //Pour fonction nécessiteuse
    fonction(graph.nb);
    Après comme dit JeromeBcx tout dépend de ton contexte et de sont utilisation.

  5. #5
    Membre confirmé Avatar de colocolo
    Inscrit en
    Février 2007
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 166
    Par défaut
    j'ai essayer de faire que ma nouvelle classe qui veux utiliser le "nb" est amie de la class graphe.
    class Graph {

    public:
    int ma[10][10];
    int nb;// je veux utiliser nb dans une fonction de la classe comp

    Graph (int );
    int ajouter_sommet();
    void retirer_sommet();
    void ajouter_arc();
    void retirer_arc();
    void Afficher();
    void Succ();
    friend class comp; // la classe comp et ami de la class graph
    };
    en complilons tjrs il ya une erreur de ce genre:
    error: "nb" was not declared in this scope

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Montre comment tu essaies de l'utiliser.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre très actif Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Par défaut
    tu met la classe sois en heritage ou en classe amie .

  8. #8
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 359
    Par défaut
    Heu, je suis pas sûr, mais je crois qu'il veut voir comment utiliser une classe friend,...

    En fait le seul avantage (à ma connaissance) de déclarer une classe friend, c'est de permettre à la classe déclaré friend d'avoir accès à tous les attributs de ta classe, mais pour qu'elle puisse s'en servir, il faut bien lui dire quelle instance de la classe elle va utiliser,...

    Donc, en simple, ça donne un truc 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
    29
    30
    31
    32
    33
    class une_class;
    class another_class;
    class une_class
    {
    	friend another_class;
    private:
    	int nbr;
    public:
    	une_class(){ nbr=5;}
    	void Affichage(){Console::WriteLine("mon nbr =");
    	Console::WriteLine(nbr);}
     
    } ;
    class another_class
    {	
    public:
    	void Affichage(une_class A){Console::WriteLine("le nbr de la classe qui m'a déclaré en ami est :");
    	Console::WriteLine(A.nbr);
    	}
     
    };
     
    int _tmain()
    {
        // TODO: Please replace the sample code below with your own.
    	une_class class1;
    	another_class class2;
    	class1.Affichage();
    	class2.Affichage(class1);
    	Console::ReadLine();
     
    	return 0;
    }
    En espérant que c'est pas HS,...

  9. #9
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut
    Citation Envoyé par colocolo Voir le message
    j'ai essayer de faire que ma nouvelle classe qui veux utiliser le "nb" est amie de la class graphe.
    Sauf cas particulier (plutôt rare finalement) essayes de ne pas trop utiliser friend. Utilises plutôt des getter/setter à la place.
    Crois moi le mot clé friend peut paraitre magic et répondre à ce que tu attend mais à terme c'est un très mauvais choix dans ton cas.
    Pour plus d'info cf

  10. #10
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Citation Envoyé par befalimpertinent Voir le message
    Sauf cas particulier (plutôt rare finalement) essayes de ne pas trop utiliser friend. Utilises plutôt des getter/setter à la place.
    Friend c'est aml (sauf certains cas)
    getter/setter : c'est mal aussi !
    Car tu expose ton interface privé !
    On encapsule des comportements, pas des données.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    SI les getters/setters étaient si mal que ça, pourquoi a-t-on inventé les Propriétés sur des plate-formes comme .Net et COM?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. [Taglibs] Utiliser les classes css ?
    Par PeteMitchell dans le forum Struts 1
    Réponses: 4
    Dernier message: 05/05/2007, 01h31
  2. Réponses: 31
    Dernier message: 30/03/2006, 16h57
  3. Les classes ne s'affichent pas
    Par karl3i dans le forum MFC
    Réponses: 8
    Dernier message: 26/01/2004, 14h52
  4. delocaliser les classe
    Par otb82 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 17/11/2003, 08h54
  5. Les classes amies en Delphi
    Par Bruno75 dans le forum Langage
    Réponses: 3
    Dernier message: 02/09/2003, 19h34

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