Whivel ha detto:
è una soluzione, ma molto pericolosa.... devi conoscere tutti i mebri e li devi anchi ridefinire a volte (e poi potrebbero esserci problemi nel caso di puntatori legati alla presenza o alla mancanza della parola chiave virtual).
infatti nell'esempio tuo (ROSi) c'è un metodo semplice per aggirarlo, anzi tanti: insert, replace, append,ecc.
http://sprunge.us/gQQQ
:EDIT:
ovviamente è fattibile, ma non è molto più semplice ed ugualmente efficace gestirlo con 2 funzioni e metterlo privato (ovviamente dipende anche da quante funzioni della classe esistente devi usare e gestire)?
Beh, per difendermi in un colpo solo da tutte le funzioni alternative che possono operare sull'oggetto invalidandolo basta ereditare private o protected, intanto.
In secondo luogo, se tu fai due funzioncine per accedervi sacrifichi l'intero oggetto, tutti il codice gia` scritto per operare su una stringa non serve piu` a niente.
Immagina, per esempio, che io faccia una classe per il calcolo e la manipolazione del codice fiscale, in cui la stinga deve avere dei precisi formati e contenere cose precise. Se io mettessi una normale stringa come dato privato e altri metodi per accedervi il lettura e scrittura non farei altro che aggiungere un layer in piu`, per giunta nel posto sbaglato. Se invece creassi una classe apposita, public-safe, specializzata per fare il suo lavoro, non avrei bisogno d'altro nella classe client, avrei gia` a disposizione un oggetto pienamente autosufficente e riusabile, come la teoria della OOP consiglia.
EDIT: Tra l'altro comincio ad avere dei seri dubbi sulla vera utilita` del mascheramento delle informazioni, il concetto secondo il quale io devo utilizzare una classe seguendo la sua interfaccia (definita nell'header) e fregandomene di come le cose sono implementate. Certamente ha senso in un ambito commerciale, ma pone anche un limite: se io sapessi esattamente come una classe implementa i suoi metodi, potrei procedere a ereditare e ridefinire secondo le mie esigenze con molta piu` comodita`.
Insomma, prendi append, basta fare il controllo ed eventualmente richiamare il metodo della classe parente. E` vero che i metodi pubblici che modificano l'oggetto possono essere anche centomila, in effetti sarebbe bello avere un sistema automatizzato per questa roba.