解决方案 »

  1.   

    不好意思有个地方写错了,通过fun_test只是想模拟一下this指针的操作,fun_test应该改为:
     void fun_test(B* const pThis, int a)
     {
           pThis->fun(a);
     }
     不过,我的问题焦点不是这个。
      

  2.   

    用一个类的对象,指针或者引用调用类的非静态成员函数的时候,该函数的第一个参数就是this指针,就指向你当前的的对象。
      

  3.   

    你的代码类后面的分号都没写,感觉很乱,你想问的应该是父类指针指向子类对象吧,因为你在父类里声明的是virtual,所以调用的是子类的方法
      

  4.   

    __thiscall
    Visual Studio 2012 - Visual C++
    __thiscall
    Microsoft 专用
    __thiscall 调用预定用于成员函数,且是 C++ 成员函数的默认调用约定,不使用可变参数。 在 __thiscall下,被调用方清理堆栈,对于 vararg 功能是不可能的。 参数从右向左被推入堆栈,与此同时,this 指针通过寄存器 ECX 传递到 x86 结构上而不是堆栈上。一个原因使用 __thiscall 是在默认情况下成员函数使用 __clrcall 的类。 在这种情况下,可以使用 __thiscall 使本机代码中的单个成员函数可调用。当使用 /clr:pure 编译时,除非有指定值,否则所有函数和函数指针均为 __clrcall。在 Visual C++ 2005 之前的版本中,因为 thiscall 不是关键字,程序中无法显式指定 thiscall 调用的约定。vararg 成员函数使用 __cdecl 调用约定。 所有函数参数被推送到堆栈上,this 指针被放置在堆栈的最后。由于此调用仅适用于 C++,因此不存在 C 名称修饰模式。在ARM及其x64 设备上, __thiscall 由编译器接受及忽略.对于非静态函数类,如果函数是超行定义的,则调用约定修饰符不必在超行定义中指定。 用于非静态成员方法类,也就是说,假定声明时具有的泛型是指定的调用约定。