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

È stato utile?

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"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top