Ho creato la classe Studente, che contiene l' eta, il nome e il cognome.
Ho dichiarato poi la funzione init come friend di questa classe.
Riesco ad accedere ai dati all' interno della funzione init, a modificarli e a stamparli ma solo all' interno della funzione, non appena esco dalla funzione i dati vengono tutti reinizializzati a zero.
Questo è il main:
codice:
int main (int agrc, char **argv)
{
Studente a;
init(a);
a.print();
return 0;
}
All' interno della main chiamo la funzione init, che imposta le stringhe nome e cognome su "tizio" e "caio", e l' età a 45 anni.Poi all' interno della init stampo questi dati, e vengono visualizzati correttamente sul terminale.
Ma poi quando chiamo la funzione print, che è una funzione interna alla classe Studente, mi stampa le stringhe vuote e l' età uguale a zero.
Ecco il resto del codice:
codice:
using namespace std;
class Studente
{
public:
Studente();
void set(void);
void print(void);
friend void init (Studente a);
private:
int eta;
string nome,cognome;
};
Studente::Studente()
{
nome=" ";
cognome=" ";
eta=0;
}
void Studente::set(void)
{
cout << "Digitare nome: ";
cin >>nome;
cout << "Digitare cognome: ";
cin >>cognome;
cout << "Digitare eta: ";
cin >>eta;
}
void init(Studente a)
{
a.nome="tizio";
a.cognome="caio";
a.eta=45;
cout <<a.nome<<endl;
cout<<a.cognome<<endl;
cout<<a.eta<<endl;
}
void Studente::print(void)
{
cout << nome <<" "<<cognome<<", "<<eta<<"anni"<<endl;
}
Per chiarezza ecco cosa vedo sul terminale:
codice:
tizio
caio
45
, 0anni
Cosa fare?