È possibile accedere membri privati della classe?
Domanda
È possibile accedere privato i membri di una classe in c++.
se non avete un amico funzione e non Hai accesso a la definizione di classe
Soluzione
Vuoi dire che l'utilizzo di alcune di aritmetica dei puntatori per ottenere l'accesso ?È possibile, ma è sicuramente pericoloso.Date un'occhiata a questa domanda: L'accesso ai membri privati
Altri suggerimenti
Io credo che ci sia stato qualche vecchia scuola di trucco come questo:
#define private public
#include "header.h"
#define private private
Ma si sconsiglia di fare questo (ho letto velocemente che il detto qualcosa a proposito di questo in C++ standard) - se volete saperne di più su questo google per "#define pubblico e privato"
Beh potrebbe essere parlando rubish, ma penso che si può provare a definire un "gemello" di classe con la stessa membri della classe che si desidera modificare, ma diversi, pubblico/privato, modificatori e quindi utilizzare reintepret_cast al cast originale classe al vostro, in cui è possibile accedere ai membri privati.
È un po ' sporca ;-)
Un po ' di codice per spiegare l'idea:
class ClassWithNoAccess
{
public:
someMethod();
private:
int someVar;
};
class ClassTwin
{
public:
someMethod();
public:
int someVar;
}
e da qualche parte nel codice:
ClassWithNoAccess* noAccess = new ClassWithNoAccess();
ClassTwin* twin = reinterpret_cast<ClassTwin *>(noAccess);
twin->someVar = 1;
edit:così come qualcuno ha già scritto prima, questo potrebbe funzionare, ma la norma non garantisce l'ordine delle variabili con enti pubblici e privati modificatore sarà lo stesso
Anche se fosse possibile tramite qualche brutta hack - vedi post precedenti - si DOVREBBE non farlo.
Incapsulamento esiste per un obiettivo molto buono, e l'impostazione membro della classe come mezzo privato che lo sviluppatore non ha intenzione chiunque a pasticciare con quel membro.Che dovrebbe significare
"Non hai accesso a questo membro, in modo da utilizzare l'interfaccia pubblica alla sua piena inteso misura"