在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的。叫做this。它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起 始地址。例如:当调用成员函数a.volume时,编译系统就把对像a的起始地址赋给this指针,于是在成员函数引用数据成员时,就按照this的指向找到对象a的数 据成员。例如volume函数要计算height*width*length的值,实际上是执行:
(this->height)*(this->width)*(this->length);
由于当前this指向对象a,因此相当于执行:
(a.height)*(a.width)*(a.length);
this指针是隐式使用的,它是作为参数被传递给成员函数的。*this表示被调用的成员函数所在的对象,this*就是this所指向的对象,即当前的对象。例如:在 成员函数a.volume()的函数体中,如果出现*this,它就是本对象a。上面的语句可以使用下面的语句:
return((*this).height*(*this).width*(*this).length);
常对象
如果一个对象被声明为常对象,则不能调用该对象的非const型的成员函数(除了由系统自动调用的隐式的构造函数和析构函数)。例如:
const Time t1(10,15,36); //定义一个常对象t1,并指定数据成员的初值
t1.get_time(); //企图调用对象t1中的非const型的成员函数,非法。。。。
怎么才能引用常对象中的数据成员呢?很简单,只需将该成员函数声明为const即可,如:
void get_time() const; //将函数声明为const;
这就是常成员函数,常成员函数可以访问常对象中的数据成员,但是仍然后允许修改常对象中数据成员的值。如果一定修改常对象中的某个数据成员的值,ANSI C++考虑到实际编程的需要,对此进行了处理,对该数据成员声明为mutable,如:
mutable int count; 把count声明为可变的数据成员,这样就可以用声明为const的成员函数来修改它的值。