Pregunta

¿Es posible acceder a miembros privados de una clase en C ++.

  

siempre y cuando no tenga un amigo   función y usted no tiene acceso a   la definición de clase

¿Fue útil?

Solución

¿Quieres decir que el uso de algunos aritmética de punteros para obtener el acceso? Es posible, pero es definitivamente peligroso. Echar un vistazo a esta pregunta también: Acceso a los miembros privados

Otros consejos

Creo que había algún truco de la vieja escuela como esto:

#define private public
#include "header.h"
#define private private

Pero No se recomienda que para hacer esto (he leído rápidamente que el dicho algo sobre esto en el C ++ estándar) - si quieres leer más sobre esto en Google de "público privada #define"

Bien podría estar hablando rubish, pero creo que se podría tratar de definir una clase de "doble" con los mismos miembros que la clase que desea modificar, pero modificadores diferentes públicos / privados y luego usar reintepret_cast para emitir la clase original a la suya en la que se puede acceder a los miembros privados.

Es un poco hacky; -)

Un poco de código para explicar la idea:

class ClassWithNoAccess 
{
public:
  someMethod();

private:
  int someVar;
};

class ClassTwin 
{
public:
  someMethod();

public:
  int someVar;
}

y en alguna parte del código:

ClassWithNoAccess* noAccess = new ClassWithNoAccess();
ClassTwin* twin = reinterpret_cast<ClassTwin *>(noAccess);
twin->someVar = 1;

editar: así como alguien ya ha escrito antes, esto podría funcionar, pero el nivel no garantiza el orden de las variables con el modificador público y privado será el mismo

Incluso si fuera posible a través de algún artilugio desagradable - ver mensajes anteriores - que debe no hacerlo.

La encapsulación existe para un propósito muy bueno, y el miembro de la clase de ajuste como medios privados que el desarrollador no pretendía que cualquiera pueda perder el tiempo con ese miembro. Eso debería significar

"Usted no tiene que acceder a este miembro con el fin de utilizar la interfaz pública a medida que está lleno pretendido"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top