Можно ли получить доступ к частным членам класса?
Вопрос
Можно ли получить доступ к частным членам класса в С++.
при условии, что у вас нет функции друга, и у вас нет доступа к определению класса
Решение
Вы имеете в виду использование некоторой арифметики указателей для получения доступа?Это возможно, но определенно опасно.Взгляните также на этот вопрос: Доступ к частным членам
Другие советы
Я думаю, что был какой-то старый школьный трюк вроде этого:
#define private public
#include "header.h"
#define private private
Но вам настоятельно не рекомендуется это делать (я быстро прочитал, что об этом что-то сказано в стандарте C++) - если вы хотите узнать больше об этом, гуглите для "#define Private Public"
Ну, возможно, я говорю чушь, но я думаю, что вы могли бы попытаться определить класс-близнец с теми же членами, что и класс, который вы хотите изменить, но с разными модификаторами public/private, а затем использовать reinepret_cast для приведения исходного класса к вашему, в котором вы может получить доступ к частным членам.
Это немного хакерски ;-)
Немного кода, поясняющего идею:
class ClassWithNoAccess
{
public:
someMethod();
private:
int someVar;
};
class ClassTwin
{
public:
someMethod();
public:
int someVar;
}
и где-то в коде:
ClassWithNoAccess* noAccess = new ClassWithNoAccess();
ClassTwin* twin = reinterpret_cast<ClassTwin *>(noAccess);
twin->someVar = 1;
редактировать:так что, как кто-то уже писал раньше, это может работать, но стандарт не гарантирует, что порядок переменных с модификатором public и Private будет одинаковым
Даже если бы это было возможно через какой -то неприятный взлом - см. Ранние посты - вы не должны этого делать.
Инкапсуляция существует с очень хорошей целью, и установка члена класса как частного означает, что разработчик не хотел, чтобы кто-то возился с этим членом.Это должно означать
«Вам не обязательно иметь доступ к этому участнику, чтобы использовать публичный интерфейс в полной мере»