Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1592 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Classe dans une classe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Classe dans une classe

n°1688118
darkgloom
Posté le 18-02-2008 à 22:38:08  profilanswer
 

Bonsoir,

 

Dans un cadre scolaire j'ai besoin de définir une classe UnCercle qui contient un objet de classe UnPoint.

 

Voilà mon .h qui définit cette classe UnCercle :

 
Code :
  1. #ifndef UNCERCLE_H
  2. #define UNCERCLE_H
  3. class UnCercle {
  4. private :
  5. class UnPoint {
  6. private :
  7.   int sonAbscisse;
  8.   int sonOrdonnee;
  9. public :
  10.   UnPoint(void);
  11.   ~UnPoint(void);
  12.   void afficheToi(void);
  13.   int getsonAbscisse(void);
  14.   void setsonAbscisse(int telAbscisse);
  15.   int getsonOrdonnee(void);
  16.   void setsonOrdonnee(int telleOrdonnee);
  17. };
  18. int sonRayon;
  19. public:
  20. UnCercle(void);
  21. ~UnCercle(void);
  22. void afficheToi(void);
  23. int getsonRayon(void);
  24. void setsonRayon (int telRayon);
  25. };
  26. #endif
 

Je suis maintenant en train d'écrire une méthode afficheToi, qui permet d'afficher les caractéristiques du cercle (coordonnées du centre et rayon).

 

Mes questions sont les suivantes, ma classe est-elle correctement déclarée ( et comment accéder aux caractéristiques du point (sonAbscisse et sonOrdonnee) dans ma méthode afficheToi ?

 

Merci d'avance :)


Message édité par darkgloom le 18-02-2008 à 22:55:44
mood
Publicité
Posté le 18-02-2008 à 22:38:08  profilanswer
 

n°1688126
darkgloom
Posté le 18-02-2008 à 23:07:54  profilanswer
 

Oui je vois merci :)
 
Par contre comment accéder à sonAbscisse et sonOrdonnee de sonCentre ?
Quelle est la syntaxe stp ?
 
Merci en tout cas :)

n°1688159
Joel F
Real men use unique_ptr
Posté le 19-02-2008 à 07:58:27  profilanswer
 

bah :
 

Code :
  1. int x;
  2. x = sonCentre.getsonAbscisse();


 
Tu manques de bases là. Un petit tour par la case bouquin s'impose

n°1688181
darkgloom
Posté le 19-02-2008 à 09:17:16  profilanswer
 

Je commence tout juste le C++, j'ai simplement des bases en C.
 
Merci de ton aide ^^

n°1688182
Joel F
Real men use unique_ptr
Posté le 19-02-2008 à 09:19:13  profilanswer
 

tout juste ... et on te fait déjà faire de l'objet alors que visiblement les bases sont pas là :|
Quelle école ?

n°1688194
darkgloom
Posté le 19-02-2008 à 09:27:59  profilanswer
 

IUT A de Lyon1.
 
(Petite) autre question, j'arrive à faire des sonCentre.getsonAbscisse() dans mon .cpp, là où sont écrites mes méthodes, mais pas dans ma fonction main.
Quelle est l'astuce pour faire un sonCentre.setsonAbscisse() et sonCentre.setsonOrdonnee() dans main, écrire encore une autre méthode du type :
 

Code :
  1. void setsonAbscisse(){
  2. sonCentre.sonAbscisse=sonCentre.telAbscisse
  3. }


 
?


Message édité par darkgloom le 19-02-2008 à 09:39:39
n°1688207
Joel F
Real men use unique_ptr
Posté le 19-02-2008 à 09:50:32  profilanswer
 

Y a soit un manque sérieux de cours de base soit un manque de travail.
Outre une convention de nommage à coucher dehors, ça manque de forme canonique de
coplien et d'accesseur/mutateur bien construit. Allons y progressivement.

 

La classe point :

Code :
  1. class point
  2. {
  3.   public:
  4.  
  5.   point(int px=0,int py=0) : x(px), y(py) {}
  6.   point( const point& p ) : x(p.x), y(p.y) {}
  7.   ~point() {}
  8.  
  9.   point& operator=(const point& p )
  10.   {
  11.     if(this != &p)
  12.     {
  13.       x = p.x;
  14.       y = p.y;
  15.     } 
  16.     return *this;
  17.   }
  18.  
  19.   int& X()             { return x; }
  20.   const int& X() const { return x; }
  21.   int& Y()             { return y; }
  22.   const int& Y() const { return y; }
  23.  
  24.   private:
  25.   int x,y;
  26. };
 

le quatuor sacré (constructeur par défaut,destructeur, constructeur de copie, opérateur d'affectation) est la BASE d'une classe propre.
le constructeur par défaut utilise une liste d'initialisation pour construire l'objet.

 

Les accesseurs/mutateurs utilisent des références et le marqueur const pour distinguer les accès en lecture/écriture. Exemple d'utilisation

 
Code :
  1. point p;         // point (0,0) construit par defaut
  2. point q(4,-3);   // point (4,-3) construit par defaut
  3. p.X() = q.Y();   // p est desormais (-3,0)
  4. point u; // (0,0)
  5. u = p;   // u copie p et vaut (-3,0)
 

Ensuite, cercle.
Réfléchissons deux secondes, quels sont les constituant du cercle : son centre et son rayon.
Ça nous donne la signature de son constructeur. On va dire que le cercle "par défaut" est placé en (0,0)
et à un rayon nul.

 
Code :
  1. class cercle
  2. {
  3.   public:
  4.  
  5.   cercle(const point& pc = point(), int pr=0) : c(pc), r(pr) {}
  6.   cercle( const cercle& pc ) : c(pc.c), r(pc.r) {}
  7.   ~cercle() {}
  8.  
  9.   cercle& operator=(const cercle& pc )
  10.   {
  11.     if(this != &pc)
  12.     {
  13.       c = pc.c;
  14.       r = pc.r;
  15.     } 
  16.     return *this;
  17.   }
  18.  
  19.   point& centre()             { return c; }
  20.   const point& centre() const { return c; }
  21.   int& rayon()                { return r; }
  22.   const int& rayon() const    { return r; }
  23.   private:
  24.   int r;
  25.   point centre;
  26. };
 

même structure et même principe. Ici on gagne a réutiliser point et sa FCC car on va pouvoir copier direct son contenu d'un centre
à l'autre. Exemple :

 
Code :
  1. cercle z; // cercle par défaut (0,0) et rayon 0
  2. cercle a( point(3,3), 5 ) // cercle centree en (3,3) de rayon 5
  3. a.centre() = point(0,-5) // on deplace a en (0,-5)
  4. a.rayon() = 2*a.rayon(); // on double son rayon
  5. point x = a.centre();  // recuperation du centre sous forme de point
 

Pose des questions si qqchose n'est pas clair


Message édité par Joel F le 19-02-2008 à 09:51:40
n°1688827
darkgloom
Posté le 19-02-2008 à 18:44:15  profilanswer
 

Quelques questions, parceque bien que ma convention de nommage ne soit pas claire, chaque variable ou fonction veut dire quelque chose et je trouve qu'on s'y repère plus facilement.
 
Que signifient les ":" lors de l'écriture des accesseurs ?
Le destructeur ne fait aucune opération, c'est normal ?
Pourquoi toutes les méthodes sont passées en paramètres ?
 
Je suis un peu perdue dans ton code :s

n°1688846
Joel F
Real men use unique_ptr
Posté le 19-02-2008 à 20:04:21  profilanswer
 

darkgloom a écrit :


Quelques questions, parceque bien que ma convention de nommage ne soit pas claire, chaque variable ou fonction veut dire quelque chose et je trouve qu'on s'y repère plus facilement.


Les miennes aussi ;) Juste que mélanger anglais et français c'est vraiment laid.
 

darkgloom a écrit :


Que signifient les ":" lors de l'écriture des accesseurs ?


Tu veut dire dans les constructeurs ???
 

Code :
  1. point(int px=0,int py=0) : x(px), y(py) {}


 
Ça s'appelle une liste d'initialisation, ca permets d'initialiser tes membres avant d'attaquer
l'exécution du code contenu dans le constructeur. C'est la manière disons propre de faire les choses.
 

darkgloom a écrit :


Le destructeur ne fait aucune opération, c'est normal ?


Que voudrais tu qu'il fasse ?
Les membres de cercle et point sont des types atomiques.
 

darkgloom a écrit :


Pourquoi toutes les méthodes sont passées en paramètres ?


Je comprends pas la question
 

darkgloom a écrit :


Je suis un peu perdue dans ton code :s


T'inquiètes ça finira par rentrer :o

n°1688850
darkgloom
Posté le 19-02-2008 à 20:20:49  profilanswer
 

Ça s'appelle une liste d'initialisation, ca permets d'initialiser tes membres avant d'attaquer
l'exécution du code contenu dans le constructeur. C'est la manière disons propre de faire les choses.  
 
:: Ok, et concrètement que signifient les x(px) et y(px) ? (histoire de pouvoir reproduire ça quoi ^^)
 
Que voudrais tu qu'il fasse ?
Les membres de cercle et point sont des types atomiques.  
 
:: Ok donc dans la majorité des cas le destructeur n'a pas de coprs ?
 
Je comprends pas la question  
 
:: Je viens de me rendre compte que j'ai dit un peu n'importe quoi, fin en gros pourquoi mettre des & dans certaines méthodes ?
 
 
 
Merci de ta patience et de ton aide :)
 

mood
Publicité
Posté le 19-02-2008 à 20:20:49  profilanswer
 

n°1688851
Joel F
Real men use unique_ptr
Posté le 19-02-2008 à 20:24:23  profilanswer
 

darkgloom a écrit :


Ok, et concrètement que signifient les x(px) et y(px) ? (histoire de pouvoir reproduire ça quoi ^^)


 
En gros ça :
 

Code :
  1. point(int px=0,int py=0) : x(px), y(py) {}


 
c'est pareil que :
 

Code :
  1. point(int px=0,int py=0)
  2. {
  3.   x = px;
  4.   y = py;
  5. }


 

darkgloom a écrit :


Ok donc dans la majorité des cas le destructeur n'a pas de coprs ?


 
Plus ou moins. Du moment ou tu n'as pas de ressources systèmes à libérer (mémoire allouée via new, socket, etc), oui.
Rencarde toi sur le mécanisme de RAII pour plus de détails
 

darkgloom a écrit :


Je viens de me rendre compte que j'ai dit un peu n'importe quoi, fin en gros pourquoi mettre des & dans certaines méthodes ?


 
Je renvoie un référence. Ça permets d'éviter les copies inutiles dans le cas des const T&
et de permettre de modifier la valeur renvoyer dans le cas des T&. Pour les types atomiques, ça sers pas trop
mais c'est jamais perdu. Pour les méthodes qui renvoient des objets, c'est mieux. Le concept de référence est un concept
extrêmement important en C++.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Classe dans une classe

 

Sujets relatifs
[Conseil] PHP & classe Formulaires [résolu]Mise a jour de JTable entre classe
Passer une classe à une fonction dans une méthode.dictionaire & classe VBA
Attribut statique = instance d'une classeProblème d'utilisation d'une classe
[C++] Erreur déclaration tableau dans classe[C++][Résolu] Le compilateur semble ignorer une classe : pourquoi ?
struts 2: passer une parametre a une classe action[RESOLU]Enregistrement classe dans fichier
Plus de sujets relatifs à : Classe dans une classe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR