Доброго времени суток. Сегодня подниму тему доступа к private-member класса. Все мы знаем, что нельзя изменить член класса содержащийся в секции private извне. Возможно данный метод, многим из вас, уже известен.
Создадим класс с двумя мемберами и методом для их возврата.
и конечно же конструктор:
Единственный нюанс, мы должны знать точное кол-во members в классе и их тип.
1) Получаем адрес класса:
2) Делаем самую нахальную вещь в С++:
3) Выводим данные:
И последний трюк:
У данного способа есть уйма недостатков, но я постараюсь их доработать и опубликовать что-то новое по этой теме.
До новых встреч.
Создадим класс с двумя мемберами и методом для их возврата.
class A{
public:
A(int a, int b);
void SetData (int numb){ m_iA = numb; }
int GetDataA() { return m_iA; }
int GetDataB() { return m_iB; }
private:
int m_iA;
int m_iB;
}
и конечно же конструктор:
A::A(int a, int b) : m_iA(a), m_iB(b){
std::cout << "adress: " << this << " A()" << std::endl;
}
Единственный нюанс, мы должны знать точное кол-во members в классе и их тип.
1) Получаем адрес класса:
A obj_a(5,3);
A* ptrA = &obj_a;
2) Делаем самую нахальную вещь в С++:
int* ptr_iA = reinterpret_cast<int*>(obj_a);
int* ptr_iB = ptr_iA + 1;
3) Выводим данные:
cout << "\nm_iA = " << *ptr_iA << "m_iB = " << ptr_iB << endl;
И последний трюк:
ptr_iA += 5;
cout << "\n" << obj_a.GetDataA() << endl;
У данного способа есть уйма недостатков, но я постараюсь их доработать и опубликовать что-то новое по этой теме.
До новых встреч.