曲径通幽论坛

标题: this 关键字 [打印本页]

作者: beyes    时间: 2011-8-17 12:51
标题: this 关键字
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





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2