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]《直接调用类成员函数地址》,南风.



  • 大学生发SCI论文是自己掏钱吗?交多少钱

    2025-09-12
    大学生发SCI论文是否需要自己掏钱,以及具体需要多少钱,是一个复杂的问题,涉及多个因素,包括期刊类型、费用结构、学科领域、学校/导师报销政策等 。具体详情如下: 一、是否需要自己掏钱? 1、看选择SCI期刊类型 SCI期刊分为开源(OA)和非开源(非OA)两种类型。
  • 学术论文、著作和专利哪个加分高?毕业生/职称晋升一定要清楚!

    2025-09-12
    学术论文、著作和专利是毕业或职称晋升加分项,作者可根据单位要求选择准备这些学术成果,完成高校或单位要求,顺利毕业或职称晋升。那么, 学术论文、著作和专利哪个加分高 ? 加分高低取决于具体高校或单位评审政策、学科领域和成果质量等, 具体详情如下: 案例一:
  • 法学三大刊指哪三大刊:《法学研究》《中国法学》《法学》

    2025-09-12
    作为一名法学研究人员,不知道法学三大刊指哪三大刊?这是不应该,今天在这里告诉你,一定要记住了。法学最厉害的三大期刊是 《法学研究》《中国法学》《法学》 ,具体详情如下: 1、《中国法学》北大核心+CSSCI+AMI顶级+社科基金资助期刊 由司法部主管、中国法学会主
  • 2025年兰州市专业技术人员评(中级、高级)职称论文著作+课题+专利要求

    2025-09-11
    作为一名专业技术人员,想要申报中高级职称,必须满足单位评审文件要求,否则很难成功申报。申报者要知道,申报高级职称需要符合基本要求,以及相关领域的学术成果,以下是为大家介绍的 2025年兰州市专业技术人员评(中级、高级)职称论文著作+课题+专利要求 ,供参考
  • SCI一二三四区期刊推荐:审稿快、容易投稿、0版面费、无预警

    2025-09-11
    SCI收录多学科领域期刊,今天为了能够帮助大家选择合适的一二三四区期刊,推荐了部分专业领域审稿快、容易投稿、0版面费和无预警sci期刊,供大家参考: 1、 Theoretical and Applied Climatology 学科领域:大类:地球科学 小类:气象与大气科学 中科院:4区 IF:2.7
  • 恭喜!《中华神经医学杂志》入选2025-2026年度CSCD核心库

    2025-09-11
    中国科学院文献情报中心公布了2025-2026年度中国科学引文数据库(Chinese science citation database,CSCD)来源期刊遴选结果,本年度CSCD共收录来源期刊1464种,其中神经病学与精神病学领域共8本期刊入选核心库。珠江医院承办的《中华神经医学杂志》入选CSCD核心库。
  • 恭喜!《华南师范大学学报(社会科学版)》和《体育学刊》入选为CSSCI(2025—2026)来源期刊

    2025-09-10
    南京大学中国社会科学研究评价中心公布新一轮CSSCI来源期刊结果。 《华南师范大学学报(社会科学版)》和《体育学刊》入选为CSSCI(20252026)来源期刊。自1999年首届评选以来,华南师范大学主办的《华南师范大学学报(社会科学版)》连续26年入选CSSCI来源期刊,《体
  • 中国临床研究成果发表国际肝病领域顶级期刊《Hepatology》

    2025-08-12
    2025 年 8 月 11 日, 国际肝病顶级期刊《 Hepatology 》 发表了中国微芯生物自主研发的 2 型糖尿病药物西格列他钠单药治疗代谢相关脂肪性肝炎(MASH)的 Ⅱ 期临床研究成果。 (Metabolic Dysfunction-AssociatedSteatohepatitis,MASH)是一种以肝脏脂肪过度积累和炎
  • 注意!《日本侵华南京大屠杀研究》入选CSSCI来源期刊

    2025-08-12
    近日,根据《中文社会科学引文索引来源期刊(集刊)遴选办法》,南京大学中国社会科学研究评价中心评定, 《日本侵华南京大屠杀研究》入选CSSCI(2025-2026)来源期刊。 这是杂志继入选中文社会科学引文索引(CSSCI) 扩展版来源期刊中国人文社会科学期刊AMI综合评价新刊
  • 最新!演员张译获国家一级演员职称,享受正高级职称待遇

    2025-08-06
    2025年7月29日, 北京市高级专业技术资格评审委员会 发布公示,张译(公示名张毅)通过 一级演员(正高级职称) 专业技术资格评审。据了解,一级演员是中国对为繁荣国家文艺事业作出突出贡献的演员给予的领域最高职称。 公示显示,北京市艺术系列(高层次、急需紧缺、
回到顶部