Non è che il codice in una unica riga sia molto leggibile, quindi in futuro ricordati di identarlo meglio.
Detto questo:
A mio avviso i costruttori da usare per Esame sono questi (riporto solo quelli) :
codice:
class esame{
public:
esame(); //costruttore di default
esame(string); //imposta il nome dell'esame
esame(string, int, bool); //imposta nome, voto dell'esame e se è sostenuto
private:
string nome_esame;
bool sostenuto;
int voto;
};
esame::esame() {
nome_esame = "";
voto=0;
sostenuto=false;
}
esame::esame(string esame_nome){
nome_esame=esame_nome;
voto=0;
sostenuto=false;
}
esame::esame(string esame_nome, int votazione, bool fatto){
nome_esame=esame_nome;
voto=votazione;
sostenuto=fatto;
}
Il primo costruttore ti permette di creare un esame vuoto (devo fare un esame).
Il secondo ti permette di definire che tipo di esame (devo fare un esame di matematica)
Il terzo ti permette di definire un esame, il suo esito e se è sostenuto (ho fatto un esame di matematica con esito 10).
Tradotto:
codice:
Esame e0;
Esame e1("matematica");
Esame e2("matematica,10,true);
Il costruttore di Studente sarà:
codice:
studente::studente(esame nome1, esame nome2, esame nome3, esame nome4, esame nome5) {
esami[0] = nome1;
esami[1] = nome2;
esami[2] = nome3;
esami[3] = nome4;
esami[4] = nome5;
}
che potrai richiamare con:
codice:
Studente pippo(Esame("materia1"), Esame("materia2"),Esame(), Esame("materia4",5,true),Esame());
Intendendo che pippo deve dare: materia1,materia2, un esame da definire, ha già dato materia4, altro esame da definire.
In alternativa puoi scrivere:
codice:
Esame e1("materia1");
Esame e2("materia2");
Esame e3;
Esame e3("materia4",5,true);
Esame e5;
Studente pippo(e1,e2,e3,e4,e5);
Il corpo del costruttore di default di Studente va lasciato vuoto in quanto l'array di esami da fare verrà automaticamente inizializzato, elemento per elemento, con il costruttore di default di Esame (che imposterà i parametri di default).