- 1.类的成员函数
- 2.this指针
- 3.类成员函数指针
- 3.1.常规成员函数转换
- 3.2.虚函数情形
- 3.3.成员函数指针数组及其应用
- 3.4.成员函数调用和 this 指针
- 4.成员函数和成员虚函数汇编分析
- 5.作者答疑
类实例化为对象,数据成员是根据对象的首地址来偏移的,而对象的成员函数在内存中是公用的,但在C++或者C写代码时,却可以根据对象加操作符.或者->来进行访问,这在底层到底是如何实现的呢? 不同类的相同函数名的函数在内存中有不同的实现。C++中的函数在编译时会根据命名空间、类、参数签名等信息进行重新命名,形成新的函数名。
2.this指针this指针具有如下特点:
名称属性:标识符this表示。 类型属性:classname* const 值属性:表示当前调用该函数对象的首地址。 作用域:this指针是编译器默认传给类中非静态函数的隐含形参,其作用域在非静态成员函数的函数体内。 链接属性:在类作用域中,不同类的非静态成员函数中,this指针变量的链接属性是内部的,但其所指对象是外部的,即this变量是不同的实体,但指向对象是同一个。 存储类型:this指针是由编译器生成,当类的非静态成员函数的参数个数一定时,this指针存储在ECX寄存器中;若该函数参数个数未定(可变参数函数),则存放在栈中。 this指针并不是对象的一部分,this指针所占的内存大小是不会反映在sizeof操作符上的。this指针的类型取决于使用this指针的成员函数类型以及对象类型。
类的成员函数默认第一个参数为T* const register this。
3.类成员函数指针C++编译器在代码编译阶段会对类对象调用的成员函数进行静态绑定(虚函数进行动态绑定),类成员函数的地址在代码编译时就确定,类成员函数地址可以使用成员函数指针进行保存。 成员函数指针定义语法如下:
ReturnType (ClassName::* pointerName) (ArgumentLList);
ReturnType:成员函数返回类型 ClassName: 成员函数所属类的名称 Argument_List: 成员函数参数列表 pointerName:指针名称
class Test
{
public:
void print()
{
cout
关注
打赏
- Adobe illustrator插件开发-SPInterfaceSuite-插件A向插件B传递消息-插件通信-AI插件开发
- javascript-ztree-树形控件-初始化-加载节点数据-节点数据获取
- Adobe illustrator插件开发-坐标系统-AIHardSoftSuite-画板坐标-页面坐标-AI插件开发
- Adobe illustrator插件开发-AIUIDUtilsSuite-AIUIDPoolSuite-AIUIDSuite-AIUIDREFSuite-Art唯一标识符与索引-AI插件开发
- C++-逆向分析-类的成员函数地址与对象地址动态绑定-this指针-成员函数和成员虚函数反汇编解析
- C++-逆向分析-结构体和类-内存布局-this指针-静态数据成员-对象作为参数和返回值
- Adobe illustrator插件开发-命令名称-AddCommand -AI插件开发
- Adobe illustrator插件开发-事件-PlugPlugAddEventListener-向系统注册事件-AI插件开发
- Adobe illustrator插件开发-ole拖拽粘贴交换数据格式-RegisterClipboardFormat函数-AI插件开发
- Adobe illustrator插件开发-所有模块列表-内部存在大量非公开的Suite-AI插件开发