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 :

Entier signé modification


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Par défaut Entier signé modification
    Bonjour,

    Je ne parviens pas à modifier un entier signé.

    J'ai ma classe, avec son constructeur par défaut et son constructeur de recopie :

    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
    class MaClasse
    {
    	private:
    		signed int maval ;
    	public:
    		MaClasse(void);
    		MaClasse(signed int val);
     
    		int getMaval(); //getter
     
    		void setMaval(signed int maval ); //setter
     
    };
     
    MaClasse::MaClasse(void)
    {
    	maval = 0;
    }
     
    MaClasse::MaClasse(signed int val)
    {
    	this->maval = val;
    }
    Bref rien de plus simple. Lorsque je crée une instance de ma classe avec 5 en paramètre par exemple, j'ai bien maval=5.

    Cependant, lorsque j'essai de modifier la valeur de maval (entier signé) cela ne fonctionne pas alors que cela fonctionne avec en entier normal...

    Y a-t-il quelque chose de spécial à faire pour modifier un entier signé?

    merci

  2. #2
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut
    Pour initialiser des données dans un constructeur utiliser les listes d'initialisation.
    Complètement inutile d'utiliser void pour indiquer l'absence d'arguments pour une fonction, même s'il s'agit d'un constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaClasse::MaClasse(void)
    {
    	maval = 0;
    }
    devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse::MaClasse() : maval(0) { }
    Là on comprend pas très bien ce que tu fais au juste et ce que tu obtiens et comment :
    Cependant, lorsque j'essai de modifier la valeur de maval (entier signé) cela ne fonctionne pas alors que cela fonctionne avec en entier normal...

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Par défaut
    Désolé si je ne suis pas assez clair...

    Je retente :

    Lorsque je crée une instance de ma classe (contient un entier et un entier signé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse exempleClasse = new MaClasse (1,2);
    Ok pas de problème j'ai bien l'entier à 1 et l'entier signé à 2.

    Ensuite, si je veux modifier ces 2 valeurs avec mes setters :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void MaClasse::MaClasseSetval(int val)
    {
    	this->maval= val;
    }
    void MaClasse::MaClasseSetvalsigne(signed int val)
    {
    	this->mavalsigne= val;
    }
    Le int se modifie bien, mais pas le signed int.

  4. #4
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut
    Citation Envoyé par piero53 Voir le message
    Désolé si je ne suis pas assez clair...

    Je retente :

    Lorsque je crée une instance de ma classe (contient un entier et un entier signé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse exempleClasse = new MaClasse (1,2);
    Ok pas de problème j'ai bien l'entier à 1 et l'entier signé à 2.
    D'abord un new renvoie un pointeur, par conséquent tu devrais avoir quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse * exempleClasse = new ...
    (à supposer que tu aies réellement besoin d'un pointeur).
    ensuite dans le code que tu donnes il y a deux constructeurs seulement pour MaClasse : un constructeur par défaut (autrement dit un constructeur qui ne prend aucun argument) et un constructeur qui prend un unique argument de type 'signed int', je ne vois donc pas comment tu peux compiler un code qui contient un appel à un constructeur prenant deux arguments (1, 2), constructeur qui dans le code que tu as fourni n'existe pas.

    Par ailleurs, jusqu'à nouvel ordre 'signed int' et 'int' c'est blanc bonnet et bonnet blanc...

    Pour qu'on comprenne quelque chose à tout cela, il faudrait que tu donnes un programme complet compilable.

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Par défaut
    En fait, n'ayant pas envie de déballer tout le code, j'ai voulu simplifier la chose, mais tout ce que tu m'indiques je le fais bien (comme le pointeur pour le new), c'est juste qu'en simplifiant j'ai oublié l'étoile...


    Par ailleurs, jusqu'à nouvel ordre 'signed int' et 'int' c'est blanc bonnet et bonnet blanc...
    Je n'ai pas trop compris, c'est la même chose?

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Citation Envoyé par piero53 Voir le message
    Je n'ai pas trop compris, c'est la même chose?
    c'est exactement le même type. Donc si ça marche pour int et que ça ne marque pas pour signed int, ce n'est pas un problème de type. Mais il nous faudrait un code minimal reproduisant ton problème pour pouvoir donner plus d'information.

  7. #7
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par piero53 Voir le message
    Je n'ai pas trop compris, c'est la même chose?
    Et pour étendre la réponse de 3DArchi,

    signed long = long
    signed int = int
    signed short = short

    Mais

    signed char != char != unsigned char

    (char étant un type spécial, qui peut être signé ou non signé selon les architectures et les flags de compilation, mais qui n'est pas le type signé ou non signé correspondant ; c'est un peu étrange, je le reconnais (ceci dit, il y a de bonnes raisons à cela).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. Conversion entier signé/non signé
    Par BATCHOS CON TEQUILA dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 03/03/2009, 16h53
  2. Débordement sur entier signé
    Par Jerem0101 dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 31/10/2008, 13h30
  3. TColor avec un entier signé
    Par KRis dans le forum Langage
    Réponses: 7
    Dernier message: 10/07/2008, 18h43
  4. Comment mettre dans un 'CHARACTER' un entier signé
    Par Kaeguri dans le forum Fortran
    Réponses: 2
    Dernier message: 16/04/2007, 17h11
  5. [C#] Conversion chaîne vers entier signé 8 bits
    Par SesechXP dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/09/2006, 14h29

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