Ho un problema con la sizeof di alcune classi del mio progetto, spero voi possiate darmi una mano :P
Ecco l'OUTPUT delle sizeof:
con i miei calcoli (semplice somma di dimensioni) le sizeof dovrebbero risultare leggermente diverse:codice:sizeof(fattura): 44 sizeof(prodotti): 40 sizeof(persone): 88 sizeof(clienti): 100 sizeof(vendite): 20 sizeof(personale): 112
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&); };

Rispondi quotando