Risposte:
1) ragionamento, esperienza: chi utilizza questa classe? Perche?, Quando?
2) certo
3) certo, ma in C++ non e' una pratica molto utilizzata. Le inner classi sono utili quando la loro visibilita' e' relegata alla sola implementazione della classe. Questo come regola generale. Poi tutto si puo fare
4) class e struct sono esattamente la stessa cosa. Cambia solo il livello di visibilita' di default:
per le classi e' privato, per le strutture e' pubblico.
La scelta tra class e struct e' assolutamente indifferente.
In generale, comunque, si utilizza:
1) class quando si vuole implementare una classe, concetto della programmazione ad oggetti. E' plausibile che una classe abbia pochi metodi pubblici e tutto il resto protetto o privato
2) struct quando si deve implementare una struttura dati in cui devono essere trasportate delle informazioni. E' ragionevole pensare che tutti i membri di una struct vengano utilizzati da un'altra parte. Alla struct si aggiungono in generale solo alcuni metodi di servizio che estraggono le informazioni con qualche semplice trasformazione. Ad esempio memorizzi l'ora come ore,minuti,secondi ed estrai il valore come secondi.
Ma e' solo una questione stilistica. Tutto quello che si fa con una struct si puo' fare con una class e viceversa.
Studiati i design patterns.
Non guardare la data: e' un testo fondamentale