C++类外面如何访问私有成员变量?只要有该对象的指针就可以访问。
例子如下,要访问A对象的私有成员m_int,和m_double怎么办?只要操作A* a即可,
class A
{
public:
A(int a, double d)
{
m_int = a;
m_double = d;
}
private:
int m_int;
double m_double;
};
int main()
{
A* a = new A(1, 2);
cout << "a is:"<<a << endl;//输出对象a存放的首地址
int* pa = reinterpret_cast<int*>(a);//用reinterpret_cast将对象指针转成int*,通过该指针就可以访问成员m_int
cout << pa << endl;
cout << *pa << endl;
double* dp = reinterpret_cast<double*>(pa+2);//+2是因为内存对齐,int和double都是8个字节
cout << *dp << endl;
return 0;
}
由此可见,指针是非常危险的,可以越过类的私有权限访问成员。
还有一种更简便的方法,构造一个和A完全一样的类,把私有成员声明为公有,然后用reinterpret_cast将A类型对象指针转化成之前构造的类的对象指针,通过该指针访问这些public成员即可。