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

SDL Discussion :

[POO][SDL_gfx] Initialisation de variable bizarre ....


Sujet :

SDL

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut [POO][SDL_gfx] Initialisation de variable bizarre ....
    Bonjour a tous !

    Me voila arriver sur ce forum qui m'a l'air bien sympathique avec une question sur les initialisations de classes en C++.
    J'ai en fait dans ma classe des variables de type Sint16 (pour la librairie SDL_gfx) declaré private.
    Je les initialise avec une fonction memebre comme cela:

    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
     
    void Circle::circle(Sint16 xB, Sint16 yB, Uint8 rB, Uint8 gB, Uint8 bB, Uint8 alphaB, Sint16 loudB, Sint16 radB, SDL_Surface *screenB)
    {
     
      cout << "Initialisation .... " << endl;
     
      if&#40;xB != NULL&#41;
        xB = x;
        cout << "x = " << xB << endl;
     
      if&#40;yB != NULL&#41;
        yB = y;
        cout << "y = " << yB << endl;
     
      if&#40;rB != NULL&#41;
        rB = r;
        cout << "r = " << rB << endl;
     
      if&#40;gB != NULL&#41;
        gB = g;
        cout << "g = " << gB << endl;
     
      //etc ... pour toute les valeurs transmise en parametre ...
      cout << "&#91;fait&#93; !" << endl << endl;
    &#125;
    Voila, cec fait quand je cré mon objet puis que je fait appelle a cette fonction, jobtien des resultats tels que -9216 pour x ou encore ù pour g !


    Voila, mais la je ne vois vraiment pas pourquoi j'obtiens des valeurs aussi bizzarre ....

    merci d"avance

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    On initialise de préférence avec le constructeur.
    Je te conseillerais de plus de créer des types spécifiques pour les points et les couleurs.

    Ensuite, l'expression a = b; affecte b à a, et non l'inverse.Donc remplace les xB = x par des x = xB.

    NULL n'a plus de raison d'être en C++, et (même en C) ne doit pas être utilisé avec autre chose que des pointeurs. Surtout que si l'utilisatuer veut que r vaille zéro, avec ton code il ne peut pas. Tu peux supprimer les if ( xxx != NULL ). Apparament, tu voulais tester si le paramètre est défini. Un paramètre est TOUJOURS défini.

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut


    BOURDE monumental.

    Merci beauoup !

    (surtout pour l'histoire des NULL, je ne savais pas du tout, au moins cela m'aura appris quelque chose Merci encore)

    Merci.

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Hmm je m'explique quand meme pourquoi je n'est pas utilisé de constructeur: car cette fonction est aussi utilisé pour redefinir les variables ....

    Et merci encore.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Citation Envoyé par no login
    Hmm je m'explique quand meme pourquoi je n'est pas utilisé de constructeur: car cette fonction est aussi utilisé pour redefinir les variables ....
    Plait-il ?

    Une mauvaise conception n'a pas d'excuse.

  6. #6
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Ops double post. (je crois que je vais aller dormir .....
    Voir dans 2 messages.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Citation Envoyé par no login
    Hmm je m'explique quand meme pourquoi je n'est pas utilisé de constructeur: car cette fonction est aussi utilisé pour redefinir les variables ....
    Plait-il ?

    Une mauvaise conception n'a pas d'excuse.

  8. #8
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Mais est-il raisonnable de faire une autre methode pour modifier ces données ?! :

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Poste toute ta classe pour voir.

    Tout ce que je peux te dire, c'est que l'apparition d'une fonction init ou équivalente, ce n'est pas terrible (Que se passe-t-il si cette fonction n'est pas appelée ? Si elle est appelée plusieurs fois ? Bref, à réserver au C). Les champs de couleurs, je les mettrait en public. Les champs de position, il faut voir.

  10. #10
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Voici ma classe:

    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
     
    class Circle //classe gerant les ronds &#40;attention contient le&#40;s&#41; animations&#41;
    &#123;
    private&#58; // ... clarifions .....
      Sint16 x;Sint16 y;                    //position X et Y
      Uint8 r;Uint8 g;Uint8 b;Uint8 alpha; //RVBA
      Sint16 loud;Sint16 rad;              //loud = épaissseur; rad = rayon
      SDL_Surface *ScreenC;                 //Surface sur laquel on doit copier
     
      bool SpecialColorB; //couleur melangé ou pas ?
     
      void hide&#40;void&#41;; //RAZ de l'écran
     
    public&#58;
      int RVB;
     
      void SetColor&#40;int r, int v, int b&#41;; //regler une couleur uniforme pour le cercle
      int GetColor&#40;void&#41;;//avoir la couleur si SpecialColor = false
      void SpecialColor&#40;int type&#41;; //mettre un fond "space" => type = type de fond.
     
      void anim1&#40;void&#41;;  //dessiner un cecrcle => animation
      void draw&#40;void&#41;; //dessiner un cercle => pas d'animation ...
     
     
      void circle&#40;Sint16 xB, Sint16 yB, Uint8 rB, Uint8 gB, Uint8 bB, Uint8 alphaB, Sint16 loudB, Sint16 radB, SDL_Surface *screenB&#41;; //pseudo-constructeur pouvant etre appelé comme une methode
      ~Circle&#40;&#41;; //destructeur
    &#125;;
    Voila donc ma classe.

    [quote = "Selenite"]
    Les champs de couleurs, je les mettrait en public
    [/quote]

    Question tout de meme sombre dans mon esprit:Le but de la poo n'est-il pas de mettre le moins de chose possible en public ?
    :

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Citation Envoyé par no login
    Citation Envoyé par Selenite
    Les champs de couleurs, je les mettrait en public
    Question tout de meme sombre dans mon esprit:Le but de la poo n'est-il pas de mettre le moins de chose possible en public ?
    :

    Non.
    Se contenter de tout encapsuler dans des classes, c'est pas de la POO, c'est juste du C amélioré. Tout comme écrire des fonction get et set à tout va n'est pas une fin en soit.
    La POO c'est l'abstraction des données: héritage, notion d'interface, polymorphisme, etc. (Si tu en connais pas, Google est ton ami.)

    Mettre un membre en public, ça veut simplement dire que ce membre fait partie de l'interface. C'est-à-dire qu'il fait intrinsèquement partie de l'objet, et non pas qu'il est juste présent pour les besoins du programmeur. Quand un membre devrait être devrait être publique (ex : le pointeur vers la surface cible) mais qu'un controle doit être exercé dessus (pour éviter un pointeur invalide par ex.), on écrit une paire de get/set.

    J'aimerais t'en dire plus, mais je ne suis pas très bon pédagogue... Lis donc ceci: Le Langage C++, de Bjarne Stroustrup.

  12. #12
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Ok.

    Merci beaucoup pour le bouquin . (je crois en effet que j'en ai besoin !)

    Merci encore . ( 8) )

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

Discussions similaires

  1. memset, initialisation de variables.
    Par sympho dans le forum C
    Réponses: 4
    Dernier message: 31/12/2005, 22h20
  2. Réponses: 3
    Dernier message: 12/10/2005, 10h23
  3. [VB.NET] Initialiser les variables
    Par Dnx dans le forum ASP.NET
    Réponses: 8
    Dernier message: 06/04/2005, 17h22
  4. [VB6]Initialiser une variable Static dans un évenement
    Par loverdose dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 20/01/2005, 15h57
  5. Réponses: 9
    Dernier message: 29/06/2004, 09h40

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