class B
{
public:
B();
~B();
void visit();
};class A
{
A();
~A();
protect:
int m_data;
B m_b;
};A对象中成员m_b中的成员函数visit()如何修改m_data或者访问到m_data?
{
public:
B();
~B();
void visit();
};class A
{
A();
~A();
protect:
int m_data;
B m_b;
};A对象中成员m_b中的成员函数visit()如何修改m_data或者访问到m_data?
假如你知道 偏移为0x8,A 地址为*pint temp = *(int*)(p + 0x8); 就访问到了m_data
*(int*)(p + 0x8) = 1; 则修改了m_data...
第一次调试时 看 A的地址 就能知道 m_data位于A类的偏移...如果类没添加成员,那么这个偏移就不会变.
麻烦一点的办法如下:
class A;//声明类,便于b知道有这个东西
class B
{
public:
A* atest;
B(A* mm)
atest=mm;
;
~B();
void visit()
{
atest->
}
;
};class A
{
A();
~A();
protect:
int m_data;
B m_b(this);
};
大致就是这个意思,互相包含。
如果是头文件之间互相包含,会有问题!
楼主可以从指针是一个long型变量来考虑如何解决两个类互相包含的问题。
如果不传参的话,B类里的成员怎么去取得包含他的A类?
除非像4楼那样求地址来做.
另外楼主的代码很乱,A类的构造是私有的,无法实例化,m_b成员成是保护的,外部无法访问.楼主还是把C++语法好好看看,再像2楼那样传参,才是解决问题的方向.试了一下4楼的方法,是可行的.
class B{
public:
void visit(){
*(((int*)this)-1) = 2;
}
};class A{
public:
int m_data;
B m_b;
};