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;
}