成员函数、虚函数、this指针
来源:互联网 发布:武汉大数据培训班 编辑:程序博客网 时间:2024/06/10 19:48
1、成员函数的实现机制和普通(全局)函数没有本质区别,对编译器而言,经过名称处理以后(在函数名前加上命名空间、类名),一个成员函数就是普通函数了,在编译后的代码区域有确定的函数体和入口地址。最大的差别在于发生调用时,对于成员函数,编译器会隐含语句push this,其中this指针指向对象的地址,这就是操作所需要的数据的所在。编译后的成员函数调用可能是:
...
push this
call f
...
因此,在对类使用sizeof时,是无法看到成员函数占用空间的,因为其入口地址仅仅是在函数调用时由编译器确定,而类存储空间中无需记录任何有关成员函数的信息。
2、而静态成员函数实际上就是普通函数,只不过编译器限制了它的名字可视范围而已(因为在编译时在函数名前加上了类名)。因此调用静态成员函数时不需要push this指针的,只需要在函数名字前加上类名限定符就可以了。
3、根据以上内容可以更好理解虚函数动态绑定。当一个类中定义了虚函数,编译器会为该类定义一个虚表,该虚表记录着所有虚函数的入口地址。与此同时,类的数据成员中会被插入一个虚指针指向这个虚表(设置v-ptr必须发生在对基类构造函数的调用之后。因为,继承类如果有自己的虚函数表,那么v-ptr会被改写,以指向该表,即使此前v-ptr已经被基类所设置)。这就是为何定义成员函数不会改变sizeof(Class)的大小,而定义一个或多个虚函数均会使sizeof(Class)的大小增加4(虚指针的存储空间)。而在调用虚函数时,使用跟调用成员函数相同的策略,先push this,再根据this指向对象取得虚表中相应虚函数的入口地址,通过这样实现动态绑定,而不会像成员函数一样在编译时确定其入口地址。
- 成员函数、虚函数、this指针
- 成员函数和this指针
- 派生类中基类成员函数的this指针
- 成员函数隐含的this指针
- 成员函数隐含的this指针
- 在成员函数中delete this指针
- this指针及const成员函数
- C++成员函数 this指针 调用约定
- this指针访问成员函数问题
- This 指针和静态成员函数
- 类 this指针 const成员函数
- 成员函数及this指针的意义
- 非静态成员函数与this指针
- this指针访问成员函数问题
- this指针?const函数?const对象成员?
- C++ this指针与const成员函数
- c++ 如何把this指针传入成员函数 像全局函数一样调用成员函数
- 函数指针 成员函数指针
- Android HTTP请求访问的方法
- 寻找最小的k个数
- Android SqlLiter使用
- java基础笔记
- DataTable 的用法
- 成员函数、虚函数、this指针
- 乐趣是什么--《全景探秘游戏设计艺术》笔记
- dip,dpi,sp,density官方解答
- 为什么SqlMapClientFactoryBean与SqlMapClient类型不同也可被注入
- 1.4、单例模式
- iOS5新特性:Core Image 图片处理的强力框架
- 常用16种视图切换动画
- 第一章、左旋转字符串
- Socket 编程 windows到Linux代码移植遇到的问题