借助指针突破访问权限的限制,访问类的私有成员变量

在正常情况下,我们直接访问对象的私有变量,编译器会报错,那么有没有办法可以直接访问呢?有的,我们可以借助指针的方式去访问,类里面的成员是按顺序在内存里存放的,那么我们获得类的第一个成员的地址(即类对象的地址,这个可以自行验证),再根据各个成员变量的长度,即可获取每一个成员变量的地址。

PS:不能单纯考虑成员的实际类型,比如char,就认为它占1字节,需要考虑内存对齐的情况,我们可以借助命令:cl [filename].cpp /d1 reportSingleClassLayout[className]查看内存模型

TestA的内存模型:
借助指针突破访问权限的限制,访问类的私有成员变量_第1张图片

TestB的内存模型:
借助指针突破访问权限的限制,访问类的私有成员变量_第2张图片

程序代码:

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
using namespace std;

class TestA {
private:
    int m_a;
    char m_b;
    float m_c;
public:
    TestA(int a, char b, float c);
    void show();
};
TestA::TestA(int a, char b, float c) :m_a(a), m_b(b), m_c(c) {};

void TestA::show() {
    cout <<"通过public方法访问:"<

运行结果:
借助指针突破访问权限的限制,访问类的私有成员变量_第3张图片

你可能感兴趣的:(c++指针)