Originariamente inviato da sccc
codice:
char* base::getn_()
{
    char tmp[30];
    strcpy(tmp,n_);
    return tmp[30];
}
No, così non va bene (tra l'altro è sbagliato, perché return tmp[30] ritorna il 31° carattere che non esiste e comunque sarebbe il ritorno di un char e non di un char*).
La variabile 'tmp' è automatica, cioè "sparisce" quando la funzione termina.

La questione principale è che quel n_ è un campo della classe. Qui dipende da cosa si vuole "offrire" al chiamante di getn_().

Si potrebbe:

a) Far semplicemente return n_;
Il chiamante ha quindi un puntatore diretto al campo interno alla classe. Non è certo il massimo ... il chiamante potrebbe alterare il campo

b) Allocare dinamicamente una nuova stringa (array di char), copiare il contenuto di n_ e ritornare il puntatore alla nuova stringa.

c) Usare un oggetto string da ritornare, visto che siamo in C++.

d) Dichiarare 'static' quel char tmp[30]; in modo da rendere 'tmp' una variabile statica e non automatica. Il puntatore ritornato va usato chiaramente prima di chiamare nuovamente getn_().