首页 > 代码库 > C++ this指针 全部

C++ this指针 全部

     在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的。叫做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的成员函数来修改它的值。

 

C++ this指针 全部