Function语义学——导读

假设我们有一个Point3d的指针与对象:

1
2
Point3d obj;
Point3d *ptr = &obj;

当我们试图去调用其成员函数:
1
2
obj.normalize();
ptr->normalize();

其中,Point::normalize()定义如下:
1
2
3
4
5
6
7
8
Point3d 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
3
float Point3d::magnitude() const{
return sqrt(_x*_x+_y*_y+_z*_z);
}

在执行以上步骤时具体发生了什么?
答案是未知。C++支持三种类型的member functions:static、nonstatic、virtual,每一种类型被调用的方式都不相同,其具体差异将会在下一节详细描述。但在本节,我们尽管无法判断magnitude是否是virtual,但可以确定他一定不是static,有两个原因:

  1. 直接存取nonstatic数据
  2. 被声明为const