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 :

operateur sizeof de classes


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Par défaut operateur sizeof de classes
    Bonjour à tous,

    je travaille actuellement sous vs2005 et je constate des tailles de classe
    un peu bizares. J'ai une classe qui contient une seule donnée menbre de type char et une vingtaine de méthodes et operateurs (rien de static). Lorsque je fais un sizeof de cette classe (ou d'une instance de cette classe), l'operateur me retourne un nombre d'octets (20) largement supérieur à ce que j'attends (1 octets voir 4 suivant l'alignement mémoire), puisque une seule donnée membre de type char. Est-ce que quelqu'un peut me donnée un explication ?

    Merci

  2. #2
    screetch
    Invité(e)
    Par défaut
    peux tu montrer la declaration de ta classe ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Par défaut
    Voici ma class:


    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    class s8
    {
    	private:
     
    	protected:
    		virtual void check (const type::c::s8);
     
    		type::c::s8 _value;
     
    	public:
    		s8 (const type::c::s8 = 0);
    		s8 (const s8 &);
    		~s8 (void);
     
    		type::c::s8 value (void) const;
    		virtual void value (const type::c::s8);
    		virtual void value (const s8 &);
     
    		s8 & operator = (const type::c::s8);
    		s8 & operator = (const s8 &);
     
    		operator type::c::s8 (void);
     
    		bool operator == (const type::c::s8);
    		bool operator != (const type::c::s8);
    		bool operator >  (const type::c::s8);
    		bool operator >= (const type::c::s8);
    		bool operator <  (const type::c::s8);
    		bool operator <= (const type::c::s8);
     
    		bool operator == (const s8 &);
    		bool operator != (const s8 &);
    		bool operator >  (const s8 &);
    		bool operator >= (const s8 &);
    		bool operator <  (const s8 &);
    		bool operator <= (const s8 &);
     
    		s8 & operator += (const type::c::s8);
    		s8 & operator -= (const type::c::s8);
    		s8 & operator *= (const type::c::s8);
    		s8 & operator /= (const type::c::s8);
     
    		s8 & operator += (const s8 &);
    		s8 & operator -= (const s8 &);
    		s8 & operator *= (const s8 &);
    		s8 & operator /= (const s8 &);
     
    		s8 operator + (void);
    		s8 operator - (void);
     
    		s8 & operator ++ (void);
    		s8 operator ++ (int); 
    		s8 & operator -- (void);
    		s8 operator -- (int); 
     
    		bool operator [] (const type::c::u32);
     
    		s8 & operator >>= (const type::c::u32);
    		s8 & operator <<= (const type::c::u32);
    		s8 & operator ~ (void);
     
    		s8 & operator &= (const type::c::s8);
    		s8 & operator |= (const type::c::s8);
    		s8 & operator ^= (const type::c::s8);
     
    		s8 & operator &= (const s8 &);
    		s8 & operator |= (const s8 &);
    		s8 & operator ^= (const s8 &);
     
    		bool operator ! (void);
    		operator bool (void);
     
    		friend s8 operator + (const s8 &, const s8 &);
    		friend s8 operator - (const s8 &, const s8 &);
    		friend s8 operator * (const s8 &, const s8 &);
    		friend s8 operator / (const s8 &, const s8 &);
     
    		friend s8 operator + (const type::c::s8, const s8 &);
    		friend s8 operator - (const type::c::s8, const s8 &);
    		friend s8 operator * (const type::c::s8, const s8 &);
    		friend s8 operator / (const type::c::s8, const s8 &);
     
    		friend s8 operator + (const s8 &, const type::c::s8);
    		friend s8 operator - (const s8 &, const type::c::s8);
    		friend s8 operator * (const s8 &, const type::c::s8);
    		friend s8 operator / (const s8 &, const type::c::s8);
     
    };

  4. #4
    screetch
    Invité(e)
    Par défaut
    si je definis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    namespace type
    {
    	namespace c
    	{
    		typedef signed char s8;
    		typedef unsigned int u32;
    	}
    }
    le sizeof me renvoie 8.

    c'est parce que tu as des methodes virtuelles qui changent la taille de la classe; sans methode virtuelle, tu tombes a 1.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Par défaut
    OK merci, mais je n'est pas compris pourquoi les méthodes virtuelles change la taille d'un classe. Est-ce une spécificité du compilateur microsoft ?

  6. #6
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    +1

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

Discussions similaires

  1. Surdefinition de l'operateur "<<" avec une classe
    Par User Name dans le forum Débuter
    Réponses: 3
    Dernier message: 28/03/2011, 09h42
  2. operateur this fonctions class
    Par loisir1976 dans le forum Débuter
    Réponses: 11
    Dernier message: 04/05/2010, 22h49
  3. l'operateur = entre les classes
    Par jeanjack dans le forum Débuter
    Réponses: 11
    Dernier message: 10/04/2009, 09h43
  4. [debutant] Utilisation de l'operateur = dans une classe
    Par Battosaiii dans le forum Débuter
    Réponses: 8
    Dernier message: 10/11/2005, 23h01
  5. [Surcharge]Operateur<< avec une classe maison
    Par KeNnEdY dans le forum C++
    Réponses: 6
    Dernier message: 14/09/2005, 15h51

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