类A 包含类B的实例, 在类B的成员函数执行时动态获得类A的地址
2008-05-07 18:12
253 查看
在看<<COM本质论>> 时有下面的一个小问题:假如类A 包含类B的实例, 在类B的成员函数执行时动态获得类A的地址。
思考了一会, 写出了实例代码如下:
class CRoom
{
public :
class Bed
{
public :
int m_member1;
int m_member2;
};
class Door
{
public :
int m_member1;
void Open()
{
cout<<"Open Operation"<<endl;
}
int GetParentClsThisPointer()
{
CRoom *plObj = NULL ;
int lioffset = reinterpret_cast<int>( &plObj->mDoor) ; //获得类Door 实例在CRoom实例中的偏移
int liParentClsThisPointer = reinterpret_cast<int>(this)-lioffset ; //得到类CRoom实例的地址
return liParentClsThisPointer ;
};
};
Bed mbed;
Door mDoor ;
};
类 CRoom 包含类 Door 的实例,在类 Door 的 GetParentClsThisPointer 中动态获得类 CRoom 实例的地址。
思考了一会, 写出了实例代码如下:
class CRoom
{
public :
class Bed
{
public :
int m_member1;
int m_member2;
};
class Door
{
public :
int m_member1;
void Open()
{
cout<<"Open Operation"<<endl;
}
int GetParentClsThisPointer()
{
CRoom *plObj = NULL ;
int lioffset = reinterpret_cast<int>( &plObj->mDoor) ; //获得类Door 实例在CRoom实例中的偏移
int liParentClsThisPointer = reinterpret_cast<int>(this)-lioffset ; //得到类CRoom实例的地址
return liParentClsThisPointer ;
};
};
Bed mbed;
Door mDoor ;
};
类 CRoom 包含类 Door 的实例,在类 Door 的 GetParentClsThisPointer 中动态获得类 CRoom 实例的地址。
相关文章推荐
- 如何动态保存不同类的对象的成员函数的地址?--解决(续)
- 获得类中成员地址,函数地址
- 如何动态保存不同类的对象的成员函数的地址?--解决(续)
- linux下查找动态库中函数地址实例代码
- 获得类成员函数地址
- 如何动态保存不同类的对象的成员函数的地址?--解决
- 如何动态保存不同类的对象的成员函数的地址?--解决
- Java普通代码块,构造代码块,静态代码块,成员变量的执行顺序的代码实例
- Sql Server游标使用 exec函数执行动态sql
- 【转】C#父类与子类的静态成员变量、实例成员变量、构造函数的执行顺序
- 查看正在运行的动态链接的程序中,某个动态库中函数的虚拟地址
- CRecordset类的常用成员函数 成员变量 以及操作实例
- 输出成员函数地址小结
- 获取线程中某个函数执行完成所获得的CPU时间量
- java 中的 成员变量、局部变量、静态变量、类变量、非静态变量、实例变量、向前引用、非法向前引用、静态代码块、非静态代码块 执行时机
- 实例解析C++中类的成员函数指针
- C#利用反射实现(js)Eval,asp(Execute)功能 动态执行类库中的函数
- C#获得当前执行的函数名、当前代码行、源代码文件名
- java 中的 成员变量、局部变量、静态变量、类变量、非静态变量、实例变量、向前引用、非法向前引用、静态代码块、非静态代码块 执行时机
- MFC 一种比较笨的办法实现多线程执行类成员函数