this指针

this 可以直接访问一个隐藏的指针,这个指针就称为 this 指针。它实际上是类定义中一个缺省的预定义的指针。当调用一个成员函数时,系统保证this 指针始终指向产生这个调用的对象,并将该指针作为一个变元自动传递给该函数。同时,只有对象和成员函数之间才存在 this 指针。

【示例】下面一段程序创建一个叫做power的类来计算一个数的幂:

 power
 {
    private:
    double b, val;
        int e;
  public:
    power(double base, int exp);
    double get_power() { return val;}
  };
 power::power(double base int exp)
 {
   b = base;
   e = exp;
   val = 1;
   if(exp == 0)
     return;
   for(; exp > 0; exp--)
     val = val * b;}
 void main()
 {
   power x(4.0, 2), y(2.5, 1), z(5.7, 0);
      cout << x.get_power() <<"";
   cout << y.get_power() <<"";
      cout << z.get_power() <<"/n";
 }
 

 在一个类的成员函数内部(如power()),可以直接引用一个类的数据成员,而无需用任何对象或类的限制性说明。所以在 power 类的构造函数 power() 里语句b = base; 意味着参数 base 的值将被赋予产生这个调用的对象中的数据成员 b。在程序中分别定义了 power 的三个对象 x、y 和z,编译器将对象的成员函数与同一对象的数据成员在调用时联系在一起,为此编译器实际上给成员函数传递了一个隐藏的指向函数调用所要引用的对象的指针,即 this 指针。相同的语句可以改写如下:

    this->b = base;

    这表明,当发生函数调用时(例如当新建一个 power 类的对象x时),编译器传给构造函数 power() 一个指向对象 x 的 this 指针,并隐式地使用这个指针访问属于对象x的b的拷贝。其实上述 power() 函数中的 b=base 等语句只是简写形式,下面是用 this 指针改写的完整的 power()函数:

 power::power(double base , int exp)
 {
    this->b = base;
  this->e = exp;
    this->val = 1;
  if(exp == 0) return;
  for(; exp>0; exp--)
    this->val = this->val*this->b;
  }

    在这个例子中,数据成员的名字前缀表达式 this-> 是合法的但没有什么效果,因为this 指针的使用本来就是隐式的。友元函数不是类的成员,而且没有this指针,静态成员函数也没有 this 指针。但在另一些情况下,必须用 this 指针明确当前调用的对象,如在重载运算符时,可以看到 this 指针是非常重要的,它在某些类型的链表管理中往往也是必要的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值