曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3186|回复: 0
打印 上一主题 下一主题

this 关键字

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2011-8-17 12:51:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
this 是一个指针,指向调用成员函数时的对象,它是所有成员函数的隐式参数。因此,在成员函数中,可以通过 this 使用调用函数的对象。

示例程序:
[C++] 纯文本查看 复制代码
#include <iostream>
using namespace std;

class cl {
        int i;
public:
        void load_i(int val) { this->i = val; } // 等效于 i = val
        int get_i() { return this->i; }         // 等效于 return i
};

int main()
{
        cl o;

        o.load_i(100);
        cout << o.get_i();

        return 0;
}

运行输出:
$ ./this
100
注意:在友员函数里没有 this 指针,只有成员函数才会有 this 指针,因为友员函数不是类的成员。

示例代码2:
[C++] 纯文本查看 复制代码
// Ex7_10.cpp
// Using the pointer this
#include <iostream>
using std::cout;
using std::endl;

class CBox                             // Class definition at global scope
{
  public:
    // Constructor definition
    explicit CBox(double lv = 1.0, double bv = 1.0, double hv = 1.0)
    {
      cout << endl << "Constructor called.";
      m_Length = lv;                   // Set values of
      m_Width = bv;                    // data members
      m_Height = hv;
    }

    // Function to calculate the volume of a box
    double Volume()
    {
      return m_Length*m_Width*m_Height;
    }

    // Function to compare two boxes which returns true
    // if the first is greater than the second, and false otherwise
    bool Compare(CBox& xBox)
    {
      return this->Volume() > xBox.Volume();
    }

  private:
    double m_Length;                   // Length of a box in inches
    double m_Width;                    // Width of a box in inches
    double m_Height;                   // Height of a box in inches

};

int main()
{
  CBox match(2.2, 1.1, 0.5);           // Declare match box
  CBox cigar(8.0, 5.0,1.0);            // Declare cigar box

  if(cigar.Compare(match))
    cout << endl
         << "match is smaller than cigar";
  else
    cout << endl
         << "match is equal to or larger than cigar";

  cout << endl;
  return 0;
}

运行输出:
$ ./this

Constructor called.
Constructor called.
match is smaller than cigar
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-17 23:50 , Processed in 0.078646 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表