作者:jicanmeng
时间:2014年11月30日
先看一个示例程序:
#include <iostream> class Simple { private: int m_nID; public: Simple(int nID) { m_nID = nID; } void SetID(int nID) { m_nID = nID; } int GetID() { return m_nID; } }; int main() { Simple cSimple(1); cSimple.SetID(2); std::cout < cSimple.GetID() < std::endl; return 0; }
结果输出为2。
修改一下程序。假设SetID的参数为int m_nID
,函数体为m_nID = m_nID;
,那么输出结果为1。因为函数的参数和类的成员变量名称相同,函数中的两个m_nID都是函数的参数,导致类的成员变量没有发生变化。
再次修改一下程序,我们将SetID()函数体修改为this->m_nID = m_nID;
。如下所示:
#include <iostream> class Simple { private: int m_nID; public: Simple(int nID) { m_nID = nID; } void SetID(int m_nID) { this->m_nID = m_nID; } int GetID() { return m_nID; } }; int main() { Simple cSimple(1); cSimple.SetID(2); std::cout < cSimple.GetID() < std::endl; return 0; }
这里的this是一个指针,指向调用SetID()函数的对象本身。在c++中,对于类中的每个成员函数,都会默认有一个this指针,指向调用这个函数时对象本身。
learncpp.com上面是这样描述的:C++ has added a new parameter to the function. The added parameter is a pointer to the class object the class function is working with, and it is always named “this”. The this pointer is a hidden pointer inside every class member function that points to the class object the member function is working with.(当然,这段话不够准确,因为静态成员函数是没有this指针的。)
举例来说,对于上面的SetID(int m_nID)
函数,c++编译器会转换为下列格式:SetID(Simple * const this, int m_nID)
。
我们可以在程序中使用this指针,获取类的对象的成员变量,这样,当函数参数和类的成员变量相同时,我们可以实现我们想要的功能。