Se non puoi usare la std::string non c'è problema, ma allora non usarla nella classe studente.
Scegli un tipo di dato e adotta quello per coerenza, altrimenti è come uscire con ai piedi una scarpa diversa per piede. Possibile, ma inelegante.
I dati poi li deve memorizzare la persona corrente, non una che non c'entra niente.
codice:void persona::inserisci_persona() const { char buffer[100]; short int temp; cout<<"Inserisci nome "; cin.getline(buffer,99); this->set_nome(buffer); cout<<"Inserisci cognome "; cin.getline(buffer,99); this->set_cognome(buffer); cout<<"Inserisci eta' "; cin>>temp; this->set_eta(temp); } istream& operator>>(istream& is,studente & S) { char buffer[100]; S.inserisci_persona(); is.ignore(); cout<<"Inserisci facolta' "; is.getline(buffer,99); S.facolta=buffer; cout<<"Inserisci numero di matricola "; is>>S.matricola; return is; }