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%以上!
  • 2024-2025年高校评职称学术成果要求(论文、著作、发明专利)

    2025-05-22
    不同区域、学科领域、评职级别和评审单位对学术成果要求存在差异性,参评人在申报职称前,务必仔细阅读单位评审文件要求,确保所准备学术成果符合单位评审文件要求。下面一起看看 2024-2025年高校评职称学术成果要求(论文、著作、发明专利 )。 一、顶尖高校(985/双
  • 评职称!选EI源刊还是EI会议,有什么区别

    2025-05-22
    在职称评审中,EI源刊通常优于EI会议,但需结合政策和个人需求。若追求学术影响力或长期职业发展,建议以SCI/SSCI期刊或高质量EI期刊为主,会议论文作为辅助补充,具体选择EI源刊还是EI会议还要看职称评审单位要求。 评审政策导向 单位要求:国内部分高校或科研机构明
  • 塑料方向的期刊推荐|正规数据库收录,三网认可,快速审核

    2025-05-22
    在塑料方向,选择合适的核心期刊对于学术发表和职业发展至关重要。今天在这里为大家推荐部分国内 塑料方向的期刊| 正规数据库收录,三网认可,快速审核 ,适合工程师和科研人员选择。具体塑料方向核心期刊详情如下: 1、《塑料科技(Plastics Science and Technology)
  • 海南省!2025年安全工程专业技术人员评高级职称学术条件

    2025-05-21
    在安全工程专业领域,想要晋升高级职称,必须满足一定的学历、资历条件;专业水平;业绩条件和学术条件,否则是无法申报高级职称的。今天在这里为大家介绍 海南省!2025年安全工程专业技术人员评高级职称学术条件 有哪些: 一、高级工程师评审条件 申报高级工程师应达
  • 新手必看!如何选择合适的影响因子SCI期刊投稿

    2025-05-21
    无论你是新手还是有发表sci论文经验的作者,选择合适的sci期刊投稿是论文发表成功的关键一步,影响因子(IF)是重要但非唯一的考量因素。下面一起看看 如何选择合适的影响因子SCI期刊投稿 ?需要综合考量的过程,具体建议如下: 1、了解但或机构要求 不同高校、评审单
  • 同济大学:经管副教授王睿通、邱烨在《Marketing Science》作为第一作者和通讯作者发表研究成果

    2025-05-16
    同济大学经济与管理学院管理高等研究院副教授王睿通与副教授邱烨作为第一作者和通讯作者,在市场营销学领域的顶级期刊《 Marketing Science 》上发表了合作论文 Dual Role and Product Featuring Strategy of Digital Platform(在线平台的双重角色与产品推荐策略)。
  • Coordination Chemistry Reviews(中科院1区TOP,IF:20.3)

    2025-05-07
    近日,北京大学-贵州民族大学-贵州磷化集团富矿精开联合创新实验室谢雅典、胡海良研究团队,与郑州大学李纲教授等人合作,在晶体材料质子传导领域发表前沿性研究综述,相关成果以Post-synthetic modification strategy to immobilize acidic units within metal-organi
  • 最新 | 《国际中文教育核心期刊目录》发布,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 》期刊。西北工业大学博士生鹿大智、天津大学副教授郑岩和四
回到顶部