了解c++成员函数调用以及引用
来源:互联网 发布:gdi 矩阵变换 编辑:程序博客网 时间:2024/06/04 18:35
成员函数指针
我一直有点困惑在c++的类中并不包含成员函数,比如
class A{ public: void a(){cout<<"a";} void b(){} void c(){}};
sizeof(A)=1;
然后A A1;
A1.a/b/c()是可以工作的。
c++是如何找到成员函数的,那我想函数总应该有一个地址,通过取得一个函数的地址来调用函数?
定义函数指针
void (*ptr)()=&A::a;
完全是错误的,
才发现类成员函数的指针与c语言中的函数指针不一样
这样定义才行
void(A::*ptr)()=&A::nonstatic;
然后这样调用
A a;a.*ptr()
成功执行了,不过还是没明白,到底怎么找到的,还有这种函数指针有什么不一样??
问过大神后,了解到有一种stdcall的调用方式,就是用来调用成员函数的,果断尝试
A tempa; __asm { lea ecx, tempa mov eax, A::a call eax }
果然也成功调用,第一句取得this指针,因为成员函数都隐含着将 this指针传入。
具体关于成员函数指针的理解,这位博主讲的很详细,留着慢慢看吧
http://www.cnblogs.com/chaoguo1234/archive/2013/07/11/3185285.html
另外一个引用
教科书上总是会写那么几个别名,不占用地址空间,那到底是别名又是什么,不占用地址空间在计算机里面是怎么实现的?
带着疑问,我还是怀疑内部其实就是指针,只是外部的表现形式不一样,因为计算机中无非寸的是地址或值
写了一段小代码然后看汇编,果然,汇编一模一样
int a=4;012E13D8 mov dword ptr [a],4 int *c = &a;012E13DF lea eax,[a] 012E13E2 mov dword ptr [c],eax int &b = a;012E13E5 lea eax,[a] 012E13E8 mov dword ptr [b],eax *c = 5;012E13EB mov eax,dword ptr [c] 012E13EE mov dword ptr [eax],5 b = 3;012E13F4 mov eax,dword ptr [b] 012E13F7 mov dword ptr [eax],3 return 0;012E13FD xor eax,eax
另外还有一个博主也对此进行了深入的探究
http://www.cnblogs.com/rollenholt/articles/1907408.html
0 0
- 了解c++成员函数调用以及引用
- cons对象/指针/引用,不能调用非const成员函数
- 虚函数以及c++成员函数的调用原理
- <<c++primer>>返回引用的函数调用
- 了解虚函数(引用)
- c++调用c函数 以及c调用c++函数
- C++类成员函数做参数以及转换调用
- vs2005内嵌汇编的使用:标准的c/c++函数的调用和非标准的c/c++函数的调用以及变量的引用
- JNI之c调用java的函数,调用java的构造生成对象,得到java的成员,以及C返回Java字符串乱码
- [C++]类成员冒号初始化以及构造函数内赋值
- 如何在C代码中调用C++非成员函数
- c语言调用c++类成员函数的方法
- C++关于参数为const引用类型的函数调用参数成员函数的一个问题
- 指针 和引用 || 静态成员函数 || 虚函数 || 系统调用和库函数 ||
- 类成员函数调用
- 线程调用成员函数
- 调用成员函数
- 成员函数调用
- 使用gprof来对程序的性能分析总结
- 如何使用纯CSS构建三角形
- json格式生成xml文件
- Minimum Height Trees
- JDK源码一句注释:c.toArray might (incorrectly) not return Object[] (see 6260652)
- 了解c++成员函数调用以及引用
- Android中的消息机制
- 修改linux文件权限命令:chmod
- 密钥
- 设计模式(Design pattern)概述
- vector 基本用法
- 安卓图表引擎AChartEngine中Dataset和Render参数介绍
- 艺术是否低于科学
- websocket