假设我们有一个Point3d的指针与对象:1
2Point3d obj;
Point3d *ptr = &obj;
当我们试图去调用其成员函数:1
2obj.normalize();
ptr->normalize();
其中,Point::normalize()定义如下:1
2
3
4
5
6
7
8Point3d Point3d::normalize() const{
register float mag = magnitude();
Point3d normal;
normal._x=_x/mag;
normal._y=_y/mag;
normal._z=_z/mag;
return normal;
}
而Point3d::magnitude()有定义如下:1
2
3float Point3d::magnitude() const{
return sqrt(_x*_x+_y*_y+_z*_z);
}
在执行以上步骤时具体发生了什么?
答案是未知。C++支持三种类型的member functions:static、nonstatic、virtual,每一种类型被调用的方式都不相同,其具体差异将会在下一节详细描述。但在本节,我们尽管无法判断magnitude是否是virtual,但可以确定他一定不是static,有两个原因:
- 直接存取nonstatic数据
- 被声明为const