本篇文章直入正题。
我们的类成员函数分为inline、virtual、static、normal。
**normal成员函数:**其地址和一般函数的地址没有区别,就是函数代码在内存中的真实地址,但其调用要绑定到一个实实在在的对象上。取其地址需要使用“&”运算符。
**virtual成员函数:**其地址指的是其在vtable中的位置;取其地址需要使用“&”运算符。
inline成员函数:在运行时会展开,虽然语言允许取其地址,但是没有太大意义。
static成员函数:其地址和普通全局函数的地址没有任何区别;其不依赖与类的对象而存在,也不依赖与类的对象而调用,只是作用域变成了类作用域,可以像取全局函数的地址那样直接把类静态成员函数名指派给一个普通全局函数类型的指针,并可以直接用这个指针实现对该静态成员函数的调用。
我们本文暂时只讨论普通成员函数和虚成员函数在调用过程中的区别。
讲解用例代码文章末。
调用默认的构造函数
首先因为含有虚函数的类,如果没有构造函数的话,也会调用默认的构造函数。
因为构造函数需要用来初始化虚表指针。(这也是构造函数为什么不可以作为虚函数的原因)。
虚表地址