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 :

D�finir une classe rectangle


Sujet :

C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    180
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 180
    Par d�faut D�finir une classe rectangle
    Bonjour,

    Je d�bute en C++, et j'essaye de faire une classe rectangle ( j'ai d�j� d�fini une classe Point)
    On d�finit un rectangle � partir de son coin sup�rieur gauche et inf�rieur droit.

    Je dois tout d'abord faire une m�thode init qui construit un rectangle � partir de 2 points.

    J'ai pour l'instant fait �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
    class rectangle
    { public:
     
    rectangle(){}; // constructeur par défaut
    init(Point,Point);
     
    private:
    	Point g,d; // points sup gauche et inf droit qui définissent mon rectangle
    };
     
    rectangle::init(Point a, Point b)
    {
           //a completer !
    }
    Seulement je comprends pas trop ce que �a veut dire de "construire un rectangle � partir de 2 points".
    Qu'est ce que doit faire exactement ma m�thode init ? D�terminer les 4 points du rectangle ?

    J'ai l'impression qu'il faut juste faire :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    rectangle::init(Point a, Point b)
    {
       g=a; b=g;
    }
    Puis dans le main :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main(int argc, char* argv[])
     
    {
    	Point a,b;
    	rectangle rect;
    	a.init(1,0, " Point a");
    	b.init(0,1,"Point b");	
    	rect.init(a,b);
    	return 0;
    }
    Est-ce que c'est juste ?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par d�faut
    Salut,

    Citation Envoy� par rouliane Voir le message
    Est-ce que c'est juste ?
    Non, il faut vraisemblablement faire :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    rectangle::init(Point a, Point b)
    {
       g=a; d=b;
    }
    Et puis on passera sans doute les param�tres par const & :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    rectangle::init(const Point& a, const Point& b)
    {
       g=a; d=b;
    }
    C'est un exercice ou du 'vrai' code ?
    Parce qu'en pratique il faut utiliser les constructeurs et non cr�er des m�thodes 'init'...
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    class rectangle
    {
      rectangle(const Point& a, const Point& b);
    };
    Ah et aussi ta classe Point et ta classe rectangle n'ont pas des noms tr�s homog�nes (Rectangle ?).

    MAT.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    180
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 180
    Par d�faut
    Merci Mat.

    Alors �a n'est pas du vrai code, mais bien un exercice . Vu que ce sont des exercices progressifs, on utilise pour l'instant pas les constructeurs.

    Mais quel est l'interet de remplacer :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    rectangle::init(Point a, Point b)
    par

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    rectangle::init(const Point& a, const Point& b)
    ?

    Sinon, je ne comprends pas quand tu dis :

    aussi ta classe Point et ta classe rectangle n'ont pas des noms tr�s homog�nes (Rectangle ?)
    Qu'est ce qu'un nom "homog�ne" ?

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par d�faut
    Ah si �a fait partie d'un ensemble d'exercices progressifs alors ne tient peut-�tre pas compte de ma remarque sur const &, j'imagine que �a viendra par la suite.

    Sinon par pas tr�s homog�ne je voulais dire que Point commence par une majuscule alors que rectangle non.

    MAT.

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    180
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 180
    Par d�faut
    Ok, merci.
    Je vais essayer de faire la suite.

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    180
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 180
    Par d�faut
    Alors je continue : je dois faire maintenant une m�thode init qui construit un rectangle � partir d'un point et de 2 dimensions ( longueur et largeur ).
    J'ai suppos� que le point �tait le point sup�rieur gauche.

    Je voulais donc cr�er la m�thode suivante :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    init(Point, double, double);
    Qui sera d�finie de cette fa�on ( L et l permettront de "cr�er" le point inf�rieur droit ) :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    Rectangle::init( Point a, double L, double l)
    {
       g=a;
       d.x=a.x+L; //
       d.y=a.y-l;
    }
    Le seul probl�me c'est que �a marche pas �videmment parce que je ne peux pas acc�der � a.x, d.x, d.y et a.y car x et y sont "private".

    Sauriez-vous comment je pourrais faire pour rem�dier � cel� ?

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    180
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 180
    Par d�faut
    Je crois que j'ai trouv�. J'ai cr�er une m�thode qui retourne l'abscisse et l'ordonne d'un point :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    	int abscisse()
    	{return x;}
    	int ordonnee()
    	{return y;}
    et j'ai alors la m�thode init dans la classe Rectangle qui est :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    Rectangle::init( Point a, double L, double l)
    {
       g=a;
       Point c;
       c.init(a.abscisse()+L, a.ordonnee()-l, "Point c");
       d=c;
     
    }
    Ca vous semble correct ?

  8. #8
    Membre �prouv�
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par d�faut
    Et puis donner un type de retour pour cette fonction init...

  9. #9
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    180
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 180
    Par d�faut
    Oui j'ai oubli�, merci.

    Pour la suite, je dois remplacer ma fonction init dans ma classe Point par des constructeurs.

    Je fais donc :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Point
    {
    public:
    	Point(){x=y=0;}; // constructeur par défaut
    	Point( const double &, const double &, string); // constructeurs
     
    private:
    	double x; //abscisse
    	double y; //ordonnee
    	string nom; // nom
     
    };
    o� :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    Point::Point (const double &a, const double &b, string nom1)
    {
    	x=a;y=b; nom=nom1;
    }
    J'ai mis un cinstructeur par d�faut, mais est-ce la bonne fa�on de le d�finir ?

    Sinon, en suivant les indications de Mat, j'ai mis "const double & a" mais �a marche aussi avec "double a".
    Je ne comprends pas l'utilit� de mettre �a alors ?

  10. #10
    Membre �prouv�
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par d�faut
    Je te conseille vivement d'aller faire un tour dans la faq c++ du site et de lire du d�but � la fin. Bon nombre de tes questions y trouveront r�ponse.

  11. #11
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 155
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 155
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Point
    {
    public:
    	Point(){x=y=0;}; // constructeur par d�faut
    	Point( const double &, const double &, string); // constructeurs
    	
    private:
    	double x; //abscisse
    	double y; //ordonnee
    	string nom; // nom
     
    };
    Le point virgule en rouge n'a pas lieu d'�tre !
    Pour le const, comme l'a dit NiamorH, tu trouveras la r�ponse dans la FAQ. Sache juste que de d�clarer deux constructeurs diff�rents permet au compilateur de choisir le bon au moment voulu : constant ou pas.

  12. #12
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par d�faut
    Citation Envoy� par rouliane Voir le message
    Sinon, en suivant les indications de Mat, j'ai mis "const double & a" mais �a marche aussi avec "double a".
    Je ne comprends pas l'utilit� de mettre �a alors ?
    En g�n�ral on passe les types de base (int, double, etc..) par copie (donc sans le const &) et les types utilisateurs (Point, Rectangle, etc..) par const &, �a �vite de faire des copies pour les param�tres un peu plus couteux � copier, justement.

    MAT.

  13. #13
    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

    Cela doit probablement �tre dans la suite de l'exercice mais au cas o� :
    Dans un constructeur il est fortement recommand� (pour plusieurs raisons : --> cf. ) d'utiliser les listes d'initialisation.
    Ainsi ton constructeur
    devient:
    Et il en va de m�me pour tout tes autres constructeurs.

  14. #14
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Et, de toutes fa�ons, �vite les horribles constructions syntaxiques que sont
    Pr�f�re leur toujours la construction, peut �tre un peu plus longue � �crire (une demi seconde ) mais tellement plus lisible de
    Outre le manque de visibilit� de la m�thode que tu as employ�e, il se peut toujours que tu finisse (si x et y venaient un jour � �tre des pointeurs, par exemple) par avoir un comportement assez bizard avec cette construction syntaxique, ou la modification de x pourrait entra�ner la modification de y, ou inversement, ce qui ne sera sans doute jamais ce que tu souhaites
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

Discussions similaires

  1. D�finir une classe css dans le code jquery.
    Par piotrr dans le forum jQuery
    R�ponses: 9
    Dernier message: 27/07/2009, 11h56
  2. D�finir une Classe triangle
    Par Pingouin22 dans le forum C++
    R�ponses: 13
    Dernier message: 16/10/2007, 10h07
  3. R�ponses: 19
    Dernier message: 14/08/2007, 14h41
  4. D�finir une classe dans une autre classe
    Par acieroid dans le forum C++
    R�ponses: 7
    Dernier message: 21/05/2006, 23h24
  5. D�finir une class comme �lement graphique
    Par Janitrix dans le forum Interfaces Graphiques en Java
    R�ponses: 3
    Dernier message: 14/11/2005, 22h41

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