Ho un problema con la sizeof di alcune classi del mio progetto, spero voi possiate darmi una mano :P
Ecco l'OUTPUT delle sizeof:
codice:
sizeof(fattura): 44
sizeof(prodotti): 40
sizeof(persone): 88
sizeof(clienti): 100
sizeof(vendite): 20
sizeof(personale): 112
con i miei calcoli (semplice somma di dimensioni) le sizeof dovrebbero risultare leggermente diverse:
sizeof(fattura): 6+12+12+4+4+1=39
sizeof(prodotti): 6+25+4+4=39
sizeof(persone): 30+30+12+12=84
sizeof(clienti): PERSONE(quindi 88)+12=100 |OK|
sizeof(vendite): 6+6+4+4=20 |OK|
sizeof(personale): PERSONE(88)+17+4=109
A questo punto ho ipotizzato che le classi utilizzassero il modulo 4 per l'allocazione delle variabili ed ho ricalcolato in questo modo:
sizeof(fattura): |8|+12+12+4+4+1=41 |in realtà 44|
sizeof(prodotti): |8|+|28|+4+4=44 |in realtà 40|
sizeof(persone): |32|+|32|+12+12=88 |OK|
sizeof(clienti): PERSONE(quindi 88)+12=100 |OK|
sizeof(vendite): 6+6+4+4=20 |OK|
sizeof(personale): PERSONE(88)+|20|+4=112 |OK|
Quindi se il mio ragionamento è corretto a questo punto non capisco come calcolare le dimensioni errate...
Sperando che possiate aiutarmi, vi ringrazio in anticipo
PS:A seguire la dichiarazione delle classi.
codice:
class fattura
{
private:
char id[6], partiva[12],data[12];
float imptot,costivari;
bool pagato;
public:
//GET
char* getid();
char* getpartiva();
float getimptot();
bool getpagato();
char* getdata();
float getcostivari();
//SET
void setid(char*);
void setpartiva(char*);
void setimptot(float);
void setdata(char*);
void setpagato();
void setcostivari(float);
// COSTRUTTORE E DISTRUTTORE
fattura();
~fattura(){};
//FUNZIONI FRIENDs
friend void insfatt();
friend void visualfatt(char*);
friend fattura ricfatt(char*);
friend void regpag(char*);
friend void resoconto(char*);
friend void stampa(char*);
//OVERLOAD OPERATORE ESTRAZIONE BIT cout<<F equivale alla chiamata di operator<<(cout,F);
friend ostream& operator<< (ostream &out, fattura &F);
};
codice:
class prodotti{
private:
char idprod[6], nome[25];
float punit;
int giacenza;
public:
char* getidprod();
char* getnome();
float getpunit();
int getgiac();
void setidprod(char*);
void setnome(char*);
void setpunit(float);
void setgiac(int);
prodotti();
prodotti(const prodotti& );
~prodotti(){};
//FUNZIONI MAIN
friend void insprod();
friend void visualprod();
friend int modprod(char*);
friend bool acquisto(char*,int);
friend bool modgiac(char*,int);
friend prodotti ricprod(char*);
friend ostream& operator<< (ostream&, prodotti &);
};
codice:
class persone{
protected:
char nomecognome[30],residenza[30], telefono[12], fax[12];
public:
// CLASSE VIRTUALE PURA non è possibile inizializzare nessun oggetto
// di questa classe
virtual void visual()=0;
virtual bool mod(char*)=0;
virtual int ins()=0;
char* getnomcogn();
char* getresid();
char* gettel();
char* getfax();
void setnomcogn(char*);
void setresid(char*);
void settel(char*);
void setfax(char*);
persone();
~persone(){};
};
codice:
class clienti:public persone{
private:
char piva[12];
public:
char* getpiva();
void setpiva(char*);
clienti();
clienti(const clienti&);
~clienti(){};
// FUNZIONI VIRTUALI
int ins(); //restituisce -1 in caso di errore, 0 se si è svolta correttamente la funzione
void visual();
bool mod(char*); //restituisce 0 se non ha trovato riscontri di partita iva, 1 se ha modificato un prodotto
// FUNZIONI FRIEND
friend clienti riccli(char*); //restituisce l'elemento ricercato nei clienti
friend ostream& operator<< (ostream&, clienti&); //utilizza lo stream di output equivale a richiamare operator<<(cout,C);
};
codice:
class vendite{
private:
char idf[6], idp[6];
int quant, aliq;
public:
char* getidf();
char* getidp();
int getquant();
int getaliq();
void setidp(char*);
void setidf(char*);
void setquant(int);
void setaliq(int);
vendite();
~vendite(){};
void insvend(char*,char*,int,int);
void visualvend(char*);
};
codice:
class personale:public persone{
private:
char codfisc[17];
float stipendio;
public:
char* getcontr();
char* getcodfisc();
float getstipendio();
void setcontr(char*);
void setcodfisc(char*);
void setstipendio(float);
personale();
~personale(){};
//FUNZIONI VIRTUALI
int ins(); //-1 in caso di errore, altrimenti restituisce 0
void visual();
bool mod(char*); //0 se non modifica e quindi non trova riscontri di codicefiscale, 1 se viene eseguita la modifica
//FUNZIONI FRIENDs
friend personale ricpers(char*);
//OVER. OPERATORE
friend ostream& operator<< (ostream&, personale&);
};