Newsgroup: it.comp.lang.c++
Titolo: Operatore sizeof su struct e class... ^_^

 };
occupa x^n bytes, con:
	+ n sufficientemente elevato (a contenere tutto, ovviamente :) );
	+ x dato da max{ sizeof(type1), sizeof(type2), ..., sizeof(typek) };
E' vero quel che dico? Facevo prima a prendere un libro qualsiasi e
consultarlo? :)
<pausa>
Be'... dopo questa domanda, ho effettivamente preso il libro
(Deitel&Deitel) e cercato :)) Morale: non c'e' scritto quasi nulla su
sizeof! :( (probabilmente sara' nel volume secondo che ancora non ho)
Ho fatto altre prove e posso dire ormai di non capire piu' nulla! ;))
Sapevo che un sizeof(classe) non avrebbe prodotto il risultato sperato:
praticamente se ne frega altamente di qualsiasi costruttore o altra
funzione membro e si comporta come una struct in tutto e per tutto.
Sulle ali dell'ignoranza :), ho provato a dichiarare un costruttore
nella struttura: ho detto: "vai che ora mi sputa in un occhio il
compilatore!" e invece... compila e funziona tutto! ^_^
(l'unica e' il warning che mi dice che le funzioni sono private)
Non ho proseguito per non demoralizzarmi ancora: non vorrei scoprire che
perfino l'ereditarieta' fosse possibile con una struct! ^_-
<code>
ending:				// questa e' la label di cui sopra :)
</code>
Riepilogo: in base a cosa l'operatore 'sizeof' restituisce il risultato
se l'argomento e' una struttura (struct)? e se e' una classe?
Cosa e' possibile fare con una classe che con una struttura non si puo'?
Grazie infinite per la pazienza!
Recoil d'Arteins

 Cosa e' possibile fare con una classe che con una struttura non si puo'?
In C++ la keyword struct è un sinonimo di class, con la sola differenza
che la prima ha per default dati e metodi pubblici, la seconda privati.
Per quanto riguarda le dimensioni lo standard si limita a dire che la
dimensione di una struttura è uguale o maggiore alla somma delle
dimensioni dei singoli membri.
È facile che per motivi prestazionali il compilatore allinei ogni
singolo membro al successivo multipolo di 32 bit.
Ciao.
-- 
BSD is for UNIX lovers -- linux is for Windows haters.

 perfino l'ereditarieta' fosse possibile con una struct! ^_-
Una struct e` identica ad una class, con la differenza che pero` tutti i 
membri per default pubblici.
Al contrario, in una class, i membri sono private per default.
"Demoralizzato" a sufficienza? (ma per cosa, poi?) :-)
-- 
   |   \    \  | ___|_  |_  | ianezz a casa sua... :-)
   |  _ \  | \ | _|    /   /  Visita il LinuxTrent a
  _|_/  _\_|  _|____|___|___| 
http://www.linuxtrent.it

 "Demoralizzato" a sufficienza? (ma per cosa, poi?) :-)
No, rincuorato a sufficienza! ^_^
Semplicemente non sapevo che struct fosse talmente identico a class:
credevo fosse stata mantenuta la keyword struct solo per
retro-compatibilita' (e in effetti lo e' :) ).
Solo una domanda, rivolta a tutti: esistono progammi per Gnu/Linux,
magari open source, che permettono di avere una visione completa di quel
che avviene in memoria? Mi converrebbe cercare una gui per qualche
debugger? Quando mi interessavo di reverse engineering ne usavo diversi
in ambiente win9x: per linux ne ho trovati pochi. :(
Ah, un'ultima domanda: c'e' qualche libro riguardo al C++ che potete
consigliare a chi e' interessato a questo tipo di cose (spazio occupato
in memoria e relativo modo di allocazione ecc)?
"Effective C++" parla di questi aspetti?
Grazie mille, buon sabato sera, buona Pasqua e a buon rendere! ^_-
Saluti,
Recoil d'Arteins
ps. grazie mille anche a H.P.L.! :)