问问题描述
答精选答案

类的成员函数有4种类型:inline、virtual、static、normal。
inline成员函数:在运行时会展开,虽然语言允许取其地址,但是没有太大意义。virtual成员函数:其地址指的是其在vtable中的位置;取其地址需要使用“&”运算符。static成员函数:其地址和普通全局函数的地址没有任何区别;其不依赖与类的对象而存在,也不依赖与类的对象而调用,只是作用域变成了类作用域,可以像取全局函数的地址那样直接把类静态成员函数名指派给一个普通全局函数类型的指针,并可以直接用这个指针实现对该静态成员函数的调用。normal成员函数:其地址和一般函数的地址没有区别,就是函数代码在内存中的真实地址,但其调用要绑定到一个实实在在的对象上。取其地址需要使用“&”运算符。能够获取成员函数的地址的原因:任何成员函数的代码体都是独立于类的对象而存在的,只有非静态成员函数在调用的时候需要与具体的对象建立绑定关系(即this指针)。C++/C编译器会把所有成员函数经过Name-Mangling的处理后转换成全局函数,并且增加一个入参this作为第一个参数,工所属类的所有对象共享。纯虚函数没有实现体,非纯虚函数有实现体,切虚函数都是通过vptr和vtable来间接调用的,因此取虚函数的地址将得到该虚函数实现体在vtable中的索引号。要想得到虚函数实现体的真实地址,还需要首先从对象入手找到vptr的位置,进而找到vtable的所在,然后根据函数指针的大小和虚函数的索引,取出虚函数的真实地址。
本文来自作者[huchangtaocizhiyexueyuan]投稿,不代表公众科技网立场,如若转载,请注明出处:https://www.cpst.net.cn/miaozhi/2999394.html
评论列表(4条)
我是公众科技网的签约作者“huchangtaocizhiyexueyuan”!
希望本篇文章《类成员函数的实现是什么意思》能对你有所帮助!
本站[公众科技网]内容主要涵盖:教育咨询,知识百科
本文概览:类的成员函数有4种类型:inline、virtual、static、normal。inline成员函数:在运行时会展开,虽然语言允许取其地址,但是没有太大意义。virtual成员函数:其地址指的是其在vtable中的位置;取其地址需要使用“&”运算符。static成员函数:其地址和普通全局函数的地址没有任何区别;其不依赖与类的对象而存在,也不依赖与类的对象而调用,只是作用域变成了类作用域,可以像取全局函数的地址那样直接把类静态成员函数名指派给一个普通全局函数类型的指针,并可以直接用这个指针实现对该