一、非静态成员函数:
1.改写函数的signature(函数名,函数参数个数,函数参数):①增加this指针作为参数。②将函数内部对成员的访问改写成经由this指针访问③将成员函数重新写成一个经过mangling的外部函数。
2。Name Mangling:函数的名字被编译器修改成内部使用的名字,用于链接期使用。相反将名字恢复为源程序代码中的名字的过程叫demangling。
作用:用于区分不同的重载函数,实现重载并且帮助编译器检查不正确的重载调用。
二、虚成员函数:
1.将函数调用转化为通过指向虚函数表的指针vptr的间接调用,其余与非成员静态函数相同。(vptr也会被mangled,因为可能存在多个vptr)
三、静态成员函数:
1.以前没有静态成员函数时的调用:((Ponit3d*)0)->object_count(); //将0转化为一个对象来调用成员函数
2.性质:①不能直接存取类中的非静态成员②不能被声明为const、volatile或virtual.③不需要经由对象调用(但是可以这么做)
3.编译器你将其转化为一般的非成员函数的调用(也会被mangled)
4.对静态成员函数取地址将得到其内存地址(同普通函数一样),所以&Point3d::object_count()得到的类型是普通函数指针unsigned int (*)(),而不是成员函数指针。