Newsgroup: it.comp.lang.c++
Titolo: struct e class

Scusate l'ignoranza.
Nelle vostre risposte vedo spesso e volentieri l'uso di
typedef struct miastruct
...
Ora, forse sono influenzato dal java, ma non sarebbe più corretto/pulito
farsi una classe?
Qual'è la differenza? Quale (e quando) è meglio?
Cosa dice lo standard??
Grazie per i chiarimenti.
Gerolamo

 
In C++ una struct è esattamente una class con accessibilità 'public' di
default. Quindi, salvo questo dettaglio, "struct" e "class" possono essere
considerati perfettamente sinonimi.
E' consuetudine diffusa, comunque, utilizzare "struct" per strutture di
tipo POD, con membri dati accessibili direttamente e prive di relazioni
gerarchiche.
La classe pair<T>, ad esempio, è normalmente implementata con la keyword
struct. 
Nulla comunque ti impedisce di usare "class" con strutture che
assomigliano alle struct del C e usare "struct" per dichiarare classi
virtuali pure. Nulla tranne il buon senso, intendo.
Max

 ...
In realta' questo e' un "C-ismo". In C++ si preferisce scrivere
direttamente
struct miastruct {};
cosi' come
class miaclass {};
Ciao,
Nicola

 Cosa dice lo standard??
Non c'è altra differenza tra struct e class se non quella del default
per quanto riguarda la visibilità dei membri, public per le struct e
private per le classi.
EMG

 
Credo che il typedef faccia comunque comodo anche al C++.
Se ad esempio scriviamo
map<unsigned long, miastruct*>  pippo;
e magari iterariamo con
for (map<unsigned long, miastruct>::iterator mtor = pippo.begin();
     mtor != pippo.end(); mtor++)
{
  ...
}
si potrebbe scrivere in maniera un po' piu' pulita 
typedef map<unsigned long, miastruct*>  t_MAP;
t_MAP pippo;
for (t_MAP::iterator mtor = pippo.begin(); mtor != pippo.end(); mtor++)
{
  ...
}
Fausto

gerarchiche.
Che vuol dire POD ? :)

 Che vuol dire POD ? :)
'plain old data': interi, double etc. (e non classi o strutture
definite dall'utente).
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it

 definite dall'utente).
In realta' anche strutture o classi, purche' prive di classi base, di
membri dotati di classi base e di metodi virtuali. Ovvero quelle che si
possono assimilare alle struct del C.
Ciao,
Nicola

 Che vuol dire POD ? :)
Plain Old Data. Sostanzialmente tipi integrali e struct di tipi integrali
privi di costruttori copia e operatori assegnamento che facciano cose
diverse dalla copia bitwise dell'oggetto. Ossia tutti quei casi in cui
puoi permetterti di replicare l'oggetto usando memcpy() senza fare danni.
Max

 possono assimilare alle struct del C.
Questa e' una cosa che mi incuriosisce: lo standard nomina 'POD' per
la prima volta a pagina 5, dove spiega l'acronimo; l'indice analitico
rimanda a 3.9 dove 'POD' viene usato ma non ben definito (e piu'
avanti si parla di POD-structures).
Viene fatta una chiara distinzione per la costruzione di entita', tra
i due casi POD e non-POD; possiamo affermare che un POD e' qualcosa
per cui non sia possibile all'utente definire un ctor?  In quel caso
nemmeno la tua definizione serebbe corretta.
Chi ne sa di piu' (a parte A.M. che sa tutto)?


Credo che il typedef faccia comunque comodo anche al C++.
Vero, ma un
"typedef struct MiaStruct {} miastruct;"
e` comunque un idioma tipico del C per evitare di
scrivere ogni volta
struct MiaStruct a;
Problema che in C++ non esiste.
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------

 
Giusto. Avevo frainteso il problema
-- 
// ----------------------------------------------
// Fausto Fabbioni            
// Software Developer - Embedded Systems Adviser
//
// Certified C++ Programmer 
// Certified High IT Aptitude
// 
http://www.brainbench.com/transcript.jsp?pid=19855
//
// E-Mail: 
fabb...@freelance.it
// Web:    
www.freelance.it
// GSM:    +39-(0)347-4150101
// ----------------------------------------------