论关于C++单身汪如何技术脱单大法,技术贴,误删

_G_M_000 2018-04-30 01:40:45
RT
class _Girl
{
public:
class _Boy
{
public:
_Boy()
{
/*要求只能在这里获取_Girl的this指针
然后_Boy就可以对_Girl为所欲为了
哈哈哈
求相关代码
*/
}
}Boy;
};

int main()
{
_Girl Girl;
}
...全文
925 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2018-04-30
  • 打赏
  • 举报
回复
引用 6 楼 GM_000的回复:
[quote=引用 4 楼 paschen 的回复:] 1、计算Boy成员在_Girl类中的偏移距离(注:若_Girl指针为NULL,Boy 地址对应的值就 偏移量) 2、_Boy类中可根据偏移距离及自身this指针,计算得到_Girl类位置
这个理论不会受类继承派生虚函数或者编译环境比如在linux安卓系统这些因素影响而失效吗? 刚刚研究了一下这个应该叫虚表,看来我要找找相关书籍看看了 如果这样的话,C++不就可以完美实现C#那种属性功能了吗?而且看起来消耗的性能还不是很大[/quote] 1、不会 2、这里没虚表
www_adintr_com 2018-04-30
  • 打赏
  • 举报
回复
引用 6 楼 GM_000 的回复:
[quote=引用 4 楼 paschen 的回复:] 1、计算Boy成员在_Girl类中的偏移距离(注:若_Girl指针为NULL,Boy 地址对应的值就 偏移量) 2、_Boy类中可根据偏移距离及自身this指针,计算得到_Girl类位置
这个理论不会受类继承派生虚函数或者编译环境比如在linux安卓系统这些因素影响而失效吗? 刚刚研究了一下这个应该叫虚表,看来我要找找相关书籍看看了 如果这样的话,C++不就可以完美实现C#那种属性功能了吗?而且看起来消耗的性能还不是很大[/quote] 不会受影响 这个和属性没什么关系, 属性只是一个语法糖, gcc/vc 都对 C++ 做了扩展来实现了属性的. C#, Java 这些对比 C++ 最关键的是实现了反射, 可以运行时遍历类有哪些成员之类的元信息.
www_adintr_com 2018-04-30
  • 打赏
  • 举报
回复
引用 5 楼 GM_000 的回复:
[quote=引用 2 楼 adlay 的回复:]

_Girl* pthis = (_Girl*)((char*)this - (unsigned int)&((_Girl*)nullptr)->Boy);
_Girl* pthis = (_Girl*)(this - &((_Girl*)nullptr)->Boy);
如果我把(char*)和(unsigned int)去掉会不会作死呢,试着运行了一遍好像没发生什么bug[/quote] 你这个例子 boy 和 girl 的地址本来就是一样的, &((_Girl*)nullptr)->Boy 的结果是 0, 所以看起来是一样的. 如果类 _Girl 还有其他数据程序在 boy 的前面, 去掉 (char*) 就会出问题了. 指针的加减法是加的所指向的数据类型的大小.
_G_M_000 2018-04-30
  • 打赏
  • 举报
回复
引用 4 楼 paschen 的回复:
1、计算Boy成员在_Girl类中的偏移距离(注:若_Girl指针为NULL,Boy 地址对应的值就 偏移量) 2、_Boy类中可根据偏移距离及自身this指针,计算得到_Girl类位置
这个理论不会受类继承派生虚函数或者编译环境比如在linux安卓系统这些因素影响而失效吗? 刚刚研究了一下这个应该叫虚表,看来我要找找相关书籍看看了 如果这样的话,C++不就可以完美实现C#那种属性功能了吗?而且看起来消耗的性能还不是很大
_G_M_000 2018-04-30
  • 打赏
  • 举报
回复
引用 2 楼 adlay 的回复:

_Girl* pthis = (_Girl*)((char*)this - (unsigned int)&((_Girl*)nullptr)->Boy);
_Girl* pthis = (_Girl*)(this - &((_Girl*)nullptr)->Boy);
如果我把(char*)和(unsigned int)去掉会不会作死呢,试着运行了一遍好像没发生什么bug
paschen 版主 2018-04-30
  • 打赏
  • 举报
回复
1、计算Boy成员在_Girl类中的偏移距离(注:若_Girl指针为NULL,Boy 地址对应的值就 偏移量) 2、_Boy类中可根据偏移距离及自身this指针,计算得到_Girl类位置
_G_M_000 2018-04-30
  • 打赏
  • 举报
回复
引用 2 楼 adlay 的回复:

_Girl* pthis = (_Girl*)((char*)this - (unsigned int)&((_Girl*)nullptr)->Boy);
正解,就是这个,然后就可以在代码里实现各种奇葩功能了。 然而这个原理是什么呢? 我猜大概是先整一个空的_Girl,然后假设这个空的_Girl的指针地址为0,然后根据这个空的_Girl得出Boy偏移的指针长度, 然后根据Boy的指针地址减去Boy偏移的指针长度得出Girl的指针地址。 以上是我个人理解,不知道书本的说法是怎样的,好像是类和类的成员对象指针在内存中有个列表什么的吧,纯属个人推理
www_adintr_com 2018-04-30
  • 打赏
  • 举报
回复

_Girl* pthis = (_Girl*)((char*)this - (unsigned int)&((_Girl*)nullptr)->Boy);
_G_M_000 2018-04-30
  • 打赏
  • 举报
回复
没有人知道答案吗,这个问题是有答案的,以前见过一个大神发布过博客的,然后忘记找不到了,所以现在想问问有没有人知道

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧