1. this 是什么:
this是一个指针,指向对象实例。
2. 作用:
既然this指针指向对象实例,那this指针就相当于对象指针。有如下用法和注意事项:
3. 原理:
为什么要搞出来一个this指针,到底有什么作用,因为不通过this指针也是可以访问类的成员变量和成员函数的呀。
this指针其实是作为类成员函数的一个形参,在调用对象的接口时作为参数传递给成员函数。
只不过这个过程是隐式的,在编译阶段由编译器完成,默默地在成员函数中添加一个参数。把对象当前的首地址传入。
它是成员函数和成员变量关系的桥梁。
那么为什么要通过这种方式呢,有一定的历史原因:
C++是在C语言的基础上发展起来的。
最初C++的编译其实是将它翻译成C语言再进行编译的。但C语言只有全局函数,所以将C++中的类成员函数翻译成全局函数,把class翻译成struct。
为了方便用到类中的成员变量,则想到把类的对象作为参数传递给翻译过的全局函数。
class CCar { public: int price; void SetPrice(int p); }; void CCar::SetPrice(int p) { price= p; } int main() { CCar car; car.SetPrice(20000); return 0; }
翻译成C语言后:
struct CCar { int price; }; void SetPrice(struct CCar* this, int p) { this->price = p; } int main() { struct CCar car; SetPrice(&car, 20000); return 0; }
4. 最后分享一个让人惊讶的例子。
本来以为,通过对象的指针访问类的函数时,这个对象的指针不能为空,否则会崩溃。但是下面这段代码可以成功运行。
#include <iostream> using namespace std; class A { int i; public: void Hello(){ cout << "hello" << endl; } }; int main() { A* p = NULL; p ->Hello(); }
因为Hello这个函数不会用到成员变量,所以即时对象的指针为空也没关系。
后面有空再深究通过对象指针调用类成员函数的过程。
以上代码参考:
http://c.biancheng.net/view/170.html
感谢。
原文:https://www.cnblogs.com/dylan-liang/p/14406945.html