当前位置: 首页 > news >正文

国土资源局加强网站建设北京网络安全公司排名

国土资源局加强网站建设,北京网络安全公司排名,sem对seo的影响有哪些,.net做网站用mvc1、普通成员函数的调用 1.1 调用方式的转换 为了提高普通成员函数的调用效率,在C中,对普通成员函数的调用,会转换成对全局函数的调用。 假如有下面所示的成员函数: class Test { public:int m_i;int func(int a) {m_i a;retu…

1、普通成员函数的调用

1.1 调用方式的转换

为了提高普通成员函数的调用效率,在C++中,对普通成员函数的调用,会转换成对全局函数的调用。

假如有下面所示的成员函数:

class Test {
public:int m_i;int func(int a) {m_i += a;return m_i;}
};

在编译时会经历下面几个步骤:

(1)把对象的首地址作为参数,传递给函数。

int func(Test *const this, int a) {}

(2)对非静态成员变量的调用,改成通过this指针来调用。

int func(Test *const this, int a) {this->m_i += a;return this->m_i;     
}

(3)对函数名进行name mangling操作,通过函数名和其参数类型生成唯一标识符,来区分不同的函数。

int _ZN4Test4funcEi(Test *const this, int a){}

1.2 代码演示

(1)

在main()函数中加入调用函数func()的代码:

int main() {Test test;int ret = test.func(6);
}

然后把断点设在:int ret = test.func(6); 运行程序后,查看反汇编代码(VS2019):

简单分析下汇编语言的意思:

(1)push 6:把参数6入栈。

(2)lea ecx, [test]:把test写入ecx。

这2行其实是参数传递。

(3)call Test::func(05C12D0h):调用函数func。

(4)move dword ptr [ret], eax:把eax的值赋给ret。

从这些代码可以看到,函数的调用流程可分成3个阶段:参数传递、调用函数call、处理返回值。

在反汇编的“地址(A)”窗口输入函数func的地址:05C12D0h,回车后查看函数func的反汇编代码:

这段汇编的细节不去深究,但我们可以看到有[this]字样,可以知道函数在具体执行时用到了this指针。

所以对func函数的调用转换可以用下图表示:

如果用指针方式调用成员函数:

Test* pTest;
int ret = pTest->func(6);

则对func函数的调用转换是这样的:

(2)把代码在linux上编译后,用nm命令查看可执行文件的信息。

linux下编译:g++ ch19.cpp -o ch19

用nm命令查看可执行文件:nm ch19

可以看到,func函数被转换成了_ZN4Test4funcEi。

2、静态成员函数的调用

对于静态成员函数的调用,无论用对象名来调用,还是用对象指针来调用,效果都是一样的,都会被编译器转换成一般的针对普通函数(非成员函数)的调用形式。

静态成员函数是跟着类走的,所有调用静态成员函数时编译器是不会插入this作为形参的。

假如类Test有一个static成员函数:

static void stfunc() { }

则可以用下面的方法来调用此静态成员函数:

Test test;
test.stfunc();Test::stfunc();Test* pTest;
pTest->stfunc();

静态成员函数有以下特点:

(1)静态成员函数没有this指针,这点最重要。

(2)无法直接存取类中普通的非静态成员变量,因为非静态成员变量是通过this指针来操作的。

(3)静态成员函数不能在后面使用const,也不能设置为virtual。

(4)可以用类对象调用,但不非一定要用类对象调用。

(5)静态成员函数等同于非成员函数,需要提供回调函数的这种场合,可以将静态成员函数作为回调函数。

http://www.yayakq.cn/news/383770/

相关文章:

  • 手机 网站建设什么网站动物和人做的
  • 徐州做网站哪里好关于建设网站的经费请示
  • 郑州旅游网站设计宜昌营销型网站
  • 网上购物网站开发的背景竞价托管魏大帅
  • 想做个网站不知道怎么做一站传媒seo优化
  • 竞价网站做推广方案wordpress5.0.3
  • 雁塔网站建设钢结构人才网
  • 营销型网站建设价格是多少建设工程施工合同管理论文
  • 做中文网站公司wordpress收发邮件功能
  • 网站架构包括哪些北京新情况最新消息今天
  • 太仓市住房和城乡建设局官方网站腾讯云网站建设流程图
  • word如何做网站江西省住房建设厅网站
  • 福州微信网站网页跳转到别的网站
  • 网站需要的栏目和内容青岛胶东建设国际机场网站
  • 个人作品集网站是怎么做网站建设的一些知识
  • 酒店网站制作公司徐州做汽车销售的公司网站
  • 公司网站建设需要咨询什么问题自己能否建立公司网站
  • 大足专业建站公司郑州世界工厂网
  • 做网站模版与定制的区别杭州兼职网站建设
  • 哪里创建免费的网站cms系统哪个好用
  • 女性做网站很有名的wordpress默认后台路径
  • 廊坊集团网站建设广告设计公司需要什么设备
  • 滑县网站建设服务怎样做网络推广引流
  • 设计师网站有哪些销售定制家具洛阳建公司网站
  • 收费的网站怎么做的邯郸广告公司网站建设
  • 有专门做英文字幕的网站吗如何建立一个网站分享教程
  • 南宁专业网站营销关于网站平台建设调研的函
  • 公司网站建设精品手机网页版微信官网
  • 江苏省网站备案系统wordpress 多说 代码
  • 建设企业官方网站的流程备案官方网站