goback
月期刊咨询网
当前位置:首页>>软件开发论文>>正文

软件开发论文继承情况下直接调用类成员函数地址


所属栏目:软件开发论文
发布时间:2013-10-23 13:14:55  更新时间:2013-10-23 13:49:53

已签订领域:化学工程/制药,医学题目:**作为抗癌剂***催化剂**取代苯丙***SCI四区 直击了解更多选题

已签订领域:环境科学-公共卫生题目:用**电***生物传感器**癌症**SCI二区 直击了解更多选题

已签订领域:环境科学-公共卫生题目:**氧化石墨烯纳米***材料的生物传感器***结肠癌生物**癌胚****SCI二区 直击了解更多选题

已签订领域:环境科学-公共卫生题目:聚合物纳米***a-硫辛酸***在神经炎症***应用***临床分析SCI二区 直击了解更多选题

已签订领域:计算机视觉/遥感/智能驾驶/汽车题目:**深度学习***高分辨率遥感***车辆检***SCI三区 直击了解更多选题

已签订领域:企业管理题目:社会交流***领导***倾向***方向SSCI,SCI三区,二区 直击了解更多选题

已签订领域:企业管理题目:**中小企业社交媒体****可持续绩效***因素探析SSCI,SCI三区,二区 直击了解更多选题

已签订领域:环境科学,公共卫生题目:利用硫氨酸***石墨烯纳米***电化学***传感器实现癌胚抗原***SCI二区 直击了解更多选题

已签订领域:环境科学,公共卫生题目:基于抗***纳米复合***高性能***早起癌症诊断***SCI二区 直击了解更多选题

已签订领域:经济,能源题目:***政治冲突****绿色金融、金融**、气***化***SCI四区 直击了解更多选题

已签订领域:经济,能源题目:冲***中能源不安全对***和环境***SCI四区 直击了解更多选题

已签订领域:教育题目:大学生***社交媒体***成绩影响***SSCI三区 直击了解更多选题

已签订领域:教育题目:巴基斯坦***学习实施的***的**SSCI二区 直击了解更多选题

已签订领域:教育题目:大学生对****下网络教学**思***SSCI二区 直击了解更多选题

已签订领域:教育题目:**教师和学生对影响***医疗**效果的****看法SSCI三区 直击了解更多选题

已签订领域:计量经济学题目:**货币、黄金、**和美国***的波动***相互依赖性:**数据的分析SSCI一区 直击了解更多选题

已签订领域:计量经济学题目:东南亚***内**趋同***中等收入**:新**的***SSCI二区 直击了解更多选题

已签订领域:建筑,历史题目:历史景点在***旅游发***中的***影响**(**研究:**历史***)SSCI,SCI一区 直击了解更多选题

已签订领域:领导力,管理题目:量化**领导对角色绩效***响:**冲突与工作自主性***作用SCI二区 直击了解更多选题

已签订领域:信息技术,教育题目:数字***环境对学生学习成绩***:游戏**和***现实在教育***作用SSCI四区 直击了解更多选题

已签订领域:信息技术,教育题目:信息技术***续决策之间的***:创新***识的**作用SSCI二区 直击了解更多选题

已签订领域:信息技术,教育题目:课程**对大学生***发展的影响:学习习惯和***的***作用SSCI一区 直击了解更多选题

已签订领域:信息技术,教育题目:信息技术***与可持续决策**:高等***学生认知***作用SSCI二区 直击了解更多选题

已签订领域:计算机,英语教学题目:英语****学**与人工智能****学习SCI三区 直击了解更多选题

已签订领域:计算机,音乐题目:评价**和音乐**对学生成绩***的影响SCI三区 直击了解更多选题

已签订领域:人体工程,心理学题目:基于预先处理模型***模式人体工程学***女生肌肉骨骼***预防行为*** 直击了解更多选题

已签订领域:人体工程,心理学题目:制定一个***人体工程学**,以识别、优先考虑***职业压力源的*** 直击了解更多选题

已签订领域:人体工程,心理学题目:多重工作**压力和工作***:***工效学方法的混合方法*** 直击了解更多选题

已签订领域:数学,经济题目:数学模型***结构调整和经济转型****研究 直击了解更多选题

已签订领域:数学,经济题目:***时间**数学模型在***媒体营销**中的应用*** 直击了解更多选题

已签订领域:数学,经济题目:***时间**模型在***物流运**能力***研究 直击了解更多选题

已签订领域:数学,经济题目:碳****经济的数学模型****研究 直击了解更多选题

已签订领域:农村经济题目:农****社区**发展***分**SCI四区 直击了解更多选题

已签订领域:农村经济题目:创业***对乡村****发展的****SCI四区 直击了解更多选题

已签订领域:农村经济题目:农村创业****的空间*****究SCI四区 直击了解更多选题

已签订领域:医学,电化学题目:纳米颗粒*****及其在癌症****和重金属*****检测中的应用SCI三区 直击了解更多选题

已签订领域:医学,电化学题目:基于*****前列腺癌药物氟****检测方法的*****腺癌治疗SCI二区 直击了解更多选题

已签订领域:医学,电化学题目:气海***********金纳米颗粒的新型****************粘土及其对胃癌********************抗癌SCI二区 直击了解更多选题

已签订领域:医学,电化学题目:基于抗***********GCE纳米***********材料的高性能*******************早期癌症SCI二区 直击了解更多选题

已签订领域:医学,电化学题目:用******电化学生物传感器*****癌症***************SCI二区 直击了解更多选题

已签订领域:医学,电化学题目:基于*****石墨烯纳米****材料的生物传感******用于测定结肠*****生物*****SCI二区 直击了解更多选题

已签订领域:医学,电化学题目:聚合***纳米复合电极*****疏辛酸电化学检测*********SCI二区 直击了解更多选题

已签订领域:医学,电化学题目:利用****酸/**糖**石墨烯纳米复合修饰的电化学*****SCI二区 直击了解更多选题

已签订领域:环境能源,绿色投资题目:环境能源、绿色投资、城市化和环境类方向SCI三区 直击了解更多选题

已签订领域:计算机,英语教学题目:英语教学**人工智能***习SCI 直击了解更多选题

已签订领域:计算机,音乐题目:评价**和音乐形式*学生***影响SCI三区 直击了解更多选题

已签订领域:经济,绿色投资题目:***能源效率***化之间的***SCI三区 直击了解更多选题

已签订领域:经济政策题目:***阐明**印度经济***的关系SCI三区 直击了解更多选题

已签订领域:经济,金融题目:***国家的能源***重***SCI 直击了解更多选题

已签订领域:经济,金融投资题目:***融新之间***直接投资***SCI三区 直击了解更多选题

已签订领域:经济,数学,统计学,管理学题目:非***想重限制下***袭评价***SSCI四区 直击了解更多选题

已签订领域:经济,数字,管理学题目:基干***生产系统***SSCI四区 直击了解更多选题

已签订领域:农业,土壤科学题目:不同***有机覆盖***养分循环SSCI 直击了解更多选题

已签订领域:电力与能源系统,管理题目:pv***氢定价的***随***型稀SSCI,SCI二区 直击了解更多选题

已签订领域:建筑规划,计算机题目:使用***因子分析法***可持续***SCI三区 直击了解更多选题

已签订领域:工程技术,纺织工程,材料科学题目:甘***淀粉酶的提取***退浆中的应用SCI四区 直击了解更多选题

已签订领域:渔业,鱼类生理学题目:饲料***镉毒性的交互***生长***病理学***SCI二区 直击了解更多选题

已签订领域:渔业,鱼类生理学题目:****鱼水源***起的生******SCI三区 直击了解更多选题

已签订领域:金融,环境经济题目:*****预算在能效、绿色***的作用SCI 直击了解更多选题

已签订领域:应用数学/计算物理题目:***非线性库***自相位调制***SCI三区 直击了解更多选题

已签订领域:计算机,医学检测题目:***COVID-19***力***算法***决策SCI三区 直击了解更多选题

已签订领域:计算机,物联网,智慧城市题目:基于***物联网****算法SCI三区 直击了解更多选题

  [摘要]分析在继承情况下如何取类的成员函数的地址以及调用该地址。

  [关键词]C++成员函数,this指针

  根据类成员函数的种类不同,在继承下如何取成员函数的地址以及调用该地址的情况也是有所区别的。另外还要注意的是多继承下情况又是如何。类的成员函数和标准的C函数不同,类的成员函数有一个隐藏的指针参数this,它指向一个类的实例。在VC++中,this一般通过ECX寄存器来传递,而普通的成员函数的参数被直接压在堆栈中。this作为参数和其他普通的参数有着本质的不同,即使一个成员函数被一个普通函数的调用,在标准C++中这个成员函数和其他的普通函数的情况不相同,因为没有thiscall这样的关键字来保证它像普通参数一样正常的调用。为此,我分别就以下三种情况作了深入的分析。

  一、最简单的单继承,非虚拟函数的情况

  classA{

  public:

  intAf(){return1;}

  };

  classB:publicA

  {

  public:

  intBf(){return2;}

  };

  假如我们建立了B类的一个成员函数指针。在这个例子中,Af和Bf都是B的成员函数,所以我们的成员函数指针可以指向Af或者Bf。但是Af需要一个this指针指向B::A(后面我叫它Athis),而Bf需要一个this指针指向B(后面我叫它Bthis)。编译器保证了A类在物理上保存在B类的头部(即B类的起始地址也就是一个A类的一个实例的起始地址),这意味着Athis==Bthis。

  二、继承情况下的虚拟函数

  classA{

  Public:

  virtualintfv(){return11;

  }

  };classB:publicA{

  Public:

  virtualintfv(){return22;}

  };

  现在A和B都定义了虚函数fv,按C++语法,如果通过指针调用fv,应该发生多态行为。利用下面的代码:

  DWORDA_fv,B_fv;

  GetMemberFuncAddr_VC6(A_fv,&A::fv);

  GetMemberFuncAddr_VC6(B_fv,&B::fv);

  Ax;By;

  CallMemberFunc(0,A_fv,&x,0);//A::fv

  CallMemberFunc(0,B_fv,&x,0);//B::fv

  CallMemberFunc(0,A_fv,&y,0);//A::fv

  CallMemberFunc(0,B_fv,&y,0);//B::fv

  输出如下:

  11

  11

  22

  22

  请注意第二行输出,B_fv取的是&B::fv,但由于传递的this指针产生是&x,所以实际上调用了A::fv。同样,第三行输出,取的是基类的函数地址,但由于实际对象是派生类,最后调用了派生类的函数。这说明取得的成员函数地址在虚拟函数的情况下仍然保持了正确的行为。源代码:GetMemberFuncAddr_VC6(B_fv,&B::fv);产生的汇编代码如下:pushofset@ILT+90(`vcall')(0040105f)。

  原来取B::fv地址的时候,并不是真的就将B::fv的地址传给了函数,而是传了一个vcall函数的地址。顾名思义,vcall当然是虚拟调用的意思。我们找到地址0040105f,@ILT+90(??_9@$BA@AE):0040105Fjmp`vcall'(00401380)。该地址只是ILT的一个项,直接跳转到真正的vcall函数(00401380)。找到00401380,就可以看到vcall的代码'vcall':

  00401380moveax,dwordptr[ecx];//将this指针视为dword类型,并将指向的内容(对象的首个//dword)放入eax.

  00401382jmpdwordptr[eax];//跳转到eax所指向的地址。

  代码执行的时候,ecx就是this指针,具体说就是上面对象x或y的地址。而eax就是对象x或y的第一个dword的值。对于有虚拟函数的类对象,其对象的首地址处总是一个指针,该指针指向一个虚函数的地址表。上面的对象由于只有一个虚函数,所以虚函数表也只有一项。因此,直接跳转到eax指向的地址就好。如果有多个虚函数,则eax还要加上一个偏移量,以定位到不同的虚函数。比如,如果有两个虚函数,则会有两个vcall代码,分别对应不同的虚函数,编译器根据取的是哪个虚函数的地址,则相应的用对应的vcall地址代替。

  三、多继承情况

  很明显,现在情况要复杂得多。首先,指定成员函数的时候可能会碰到冲突。其次,给定this指针的时候需要经过调整。

  classA{public:

  intAf(){return1;};};

  classB{public:

  intBf(){return2;};};

  classD:publicA,publicB{public:

  intDf(){return4;};};

  现在我们建立一个D类的成员函数指针。在这种情况下,我们的成员函数指针可以指向Af、Bf或Df。但是Af需要一个this指针指向D::A,而Bf需要一个this指针指向D::B。这时编译器不可能把A类和B类都放在D类的头部。所以,D类的一个成员函数指针不仅要说明要指明调用的是哪一个函数,还要指明使用哪一个this指针。编译器知道A类占用的空间有多大,所以它可以对Athis增加一个delta=sizeof(A)偏移量就可以将Athis指针转换为Bthis指针。

  综上所述,为了支持一般形式的成员函数指针,需要至少三条信息:函数的地址,需要增加到this指针上的delta位移量,和一个虚拟函数表中的索引。对于VC6.0来说,还需要第四条信息:虚拟函数表(vtable)的地址。另外,对虚拟继承可能还要特别处理,而在多继承的情况下,很多时候成员函数指针已经变成了一个结构体,这时要正确调用该指针就变得格外困难。当然,解决所有这些问题已经超出了这篇文章的范围。

  参考文献:

  [1]"MemberFunctionPointersandtheFastestPossibleC++Delegates",DonClugston

  [2]《直接调用类成员函数地址》,南风.



月期刊平台服务过的文章录用时间为1-3个月,依据20年经验,经月期刊专家预审通过后的文章,投稿通过率100%以上!
  • 水刊之王,无版面费,几乎不拒稿的SCI期刊(热门学科)

    2025-04-30
    不同学科领域sci期刊中,这些期刊中有高质量的sci期刊,也有部分水刊,但这些水刊同样具有一定的影响力和认可度。今天在这里为大家介绍部分热门学科领域 水刊之王,无版面费,几乎不拒稿的SCI期刊 ,供大家参考: 1.《Scientific Reports》 IF:3.8 年发文量:22037 研
  • 涂料工业是核心期刊吗?北大核心+CSCD扩展版,版面费低(附论文模板)

    2025-04-30
    《涂料工业》杂志是中国涂料行业中历史最为悠久的专业性期刊,创刊于1959年,是行业内的权威刊物。对于涂料工业是核心期刊吗?是核心,而是双核心,北大核心+CSCD扩展版,版面费低(附论文模板),详情如下: 1、基础信息 ISSN:1001-2249 CN:42-1148/TG 复合影响因子
  • 2025年中科院期刊分区表:机械/化工/土木/海洋/地质一区top期刊

    2025-04-29
    2025年3月20日,中科院期刊分区发布后,科研作者们不再暂时担心期刊分区变化而影响毕业或职称评审了。由于期刊分区涵盖学科领域较多,今天在这里为大家介绍 工程技术机械/化工/土木/海洋/地质一区top期刊 ,供大家参考: 一、工程技术机械一区top期刊 1、INTERNATIONAL
  • 中国航海期刊是核心么?北大核心+CSCD扩展版(附论文格式模板2023版)

    2025-04-29
    《中国航海》是一本在航海领域具有广泛影响力的学术期刊,反映中国航海科技各领域的成果及水平,促进中国航海科技的发展提高,促进国内外的学术交流。中国航海期刊是核心么?北大核心+CSCD扩展版,具体详情如下: 1、基本信息 创刊时间:1965年 主办单位:中国航海学会
  • IF:3.1,材料类见刊周期短的sci期刊:materials

    2025-04-28
    Materials期刊的主要研究方向包括材料科学、化学、物理化学、冶金工程、物理应用、凝聚态物理等。今天在这里详细为大家介绍Materials期刊的详细信息: 1、Materials期刊官网 https://www.mdpi.com/journal/materials 期刊ISSN:1996-1944 2023-2024最新影响因子:3.1
  • 最新 | 《国际中文教育核心期刊目录》发布,20种期刊入选(附名单及投稿方式)

    2025-04-25
    2025 年 4 月 22 日,世界汉语教学学会在教育部中外语言交流合作中心发布了《国际中文教育核心期刊目录》。这是国际中文教育领域首个专业性评价,旨在引领学术研究聚焦现实需求和理论前沿,推动学术体系建设与实践创新,助力构建国际中文教育知识体系。以下是对该目录
  • 最新!2025年宇航领域进展发布

    2025-04-25
    2025年宇航领域科学问题和技术难题重要研究进展已于2025年4月24日在中国航天大会主论坛上正式发布。此次发布活动是由中国宇航学会和中国航天大会学术委员会委托中国科学院院士、中国航天科技集团有限公司研究员王巍进行的。 重要研究进展概述 中国宇航学会组织航天领域
  • 西北工业大学!计算机学院博士生在《Nature Communications》期刊发表论文

    2025-04-23
    近日,计算机学院科学智能(AIforScience)交叉研究中心研究成果Identifying potential risk genes for clear cell renal cell carcinoma with deep reinforcement learning发表于《 Nature Communications 》期刊。西北工业大学博士生鹿大智、天津大学副教授郑岩和四
  • 南方科技大学/浙江大学!在国际顶尖学术期刊《Science》发表论文

    2025-04-21
    2025 年 4 月 17日,南方科技大学刘心元教授团队联合浙江大学洪鑫教授团队(深圳格拉布斯研究院-光明高等研究院研究副教授张宇峰、博士后王彪、硕士研究生陈铮及博士后刘吉人为论文共同第一作者),在国际顶尖学术期刊《Science》上发表了题为:Asymmetric amination o
  • 厉害!全球发布:哈工大打造机器人领域顶级国际期刊《智能机器人(英文)》(SmartBot)

    2025-04-19
    4月14日消息,据哈尔滨工业大学官微发文,哈尔滨工业大学与Wiley出版集团联合推出的国际学术期刊《智能机器人(英文)》(SmartBot)首期创刊号于2025年3月正式面向全球发布。 期刊核心亮点: 1.国际编委团队:期刊汇聚了来自20个国家和地区的49位国际编委,其中包括26
回到顶部