C++支持三种类型的成员函数,分别为nostatic、static、virtual,每一种调用方式都不相同。
非静态成员函数(Nonstatic Menber Function)
- 改写成员成员函数签名,使其可以接收一个额外参数,这个参数是this指针
int Point::func();
//被改写为
int Point::func(Point* this);//如果成员函数是const的,插入的参数类型为const Point*类型。
- 将每一个对非静态数据成员的操作都改写为经过this操作。
- 将成员函数写成一个外部函数,对函数名进行"mangling"处理,使之成为独一无二的名称。对于名称的处理并没有统一的标准,各大编译器厂商可能有不同的处理规则。
所以说非静态成员函数跟全局函数并没有太大区别,经过编译器的处理静态绑定之后我们可以认为静态成员函数和全局函数的调用过程是一样的。
静态成员函数(Static Menber Function)
静态成员函数有一些特性:
- 不能直接访问类中的非静态成员,包括不能调用非静态成员函数
- 不能够声明为const、voliatile和virtual。
- 它不需经由对象调用,当然通过对象调用也被允许
除了缺乏一个this指针,静态成员函数与非静态成员函数没有太大区别。在这里通过对象调用和通过指针或引用调用,将被转化为同