C++ this指针的用法(附带实例)
对于 C++ 类的非静态成员,每个对象都有自己的一份拷贝,即每个对象的成员变量都是独有的,但成员函数却是所有对象共享的。那么,调用共享成员函数时该如何找到对应的成员变量呢?当然是通过类中隐藏的 this 指针。
例如:
在 OutputPages() 成员函数中,用户可以显式地使用 this 指针访问成员变量。例如:
此外,为了将 this 指针指向当前调用对象,并在成员函数中使用,在每个成员函数中都隐含一个 this 指针作为函数参数,并在函数调用时将对象自身的地址隐含作为实际参数传递。
例如,以 OutputPages() 成员函数为例,编译器将其定义为:
例如:
class CBook // 定义CBook类 { public: int m_Pages; // 定义成员变量m_Pages void OutputPages() // 定义成员函数OutputPages() { cout << m_Pages << endl; } }; int main(int argc, char* argv[]) { CBook vbBook, vcBook; // 定义两个CBook类对象vbBook和vcBook vbBook.m_Pages = 512; // 设置vbBook对象的成员变量 vcBook.m_Pages = 570; // 设置vcBook对象的成员变量 vbBook.OutputPages(); // 调用OutputPages()函数,输出vbBook对象的成员变量 vcBook.OutputPages(); // 调用OutputPages()函数,输出vcBook对象的成员变量 return 0; }程序运行结果为:
512
570
在 OutputPages() 成员函数中,用户可以显式地使用 this 指针访问成员变量。例如:
void OutputPages() { cout << this->m_Pages << endl; // 使用this指针访问成员变量m_Pages }实际上,编译器为了实现 this 指针,在成员函数中自动添加了 this 指针对成员变量的方法,类似于上面的 OutputPages() 方法。
此外,为了将 this 指针指向当前调用对象,并在成员函数中使用,在每个成员函数中都隐含一个 this 指针作为函数参数,并在函数调用时将对象自身的地址隐含作为实际参数传递。
例如,以 OutputPages() 成员函数为例,编译器将其定义为:
void OutputPages(CBook *this) { cout << this->m_Pages << endl; // 隐含添加this指针 }在对象调用成员函数时,传递对象的地址到成员函数中。以“vc.OutputPages();”语句为例,编译器将其解释为“vbBook.OutputPages(&vbBook);”,这就使 this 指针合法了,并能够在成员函数中使用。