(个人学习和理解,感觉很透彻了)
this 指针是C到C++添加的新特性,空口无凭,来看一张图
从图中可以知道,java语言内的this特性也是参考C++而来。可知,this特性的存在是有用的。下面我们来介绍一下:
this指针依附于类的对象而存在,该指针保存了该对象的地址,这是this指针。在成员函数内this可以代指该类的对象。
提示:就和C数据结构中的链表有相似,结构体内可以包含结构体自己的指针一样,这里只是把结构体指针换成了this,并且指向了自己。可以想象一下,结构体成员的指针变量指向自己,通过这个指针变量调用自己的其他变量,是相似的。个人看法,验证自行解决。
在实例化类的对象时,this指针是默认生成的,指向对象的地址。友元函数没有this指针,因为友元函数为非成员函数。
为了证明我说的正确性,我用结构体做了验证,手机编写的不容易呢。透过this指针访问到了a变量,而不是直接使用st结构体变量。这就从根本上了解了C++来源于C,希望读者理解。我可能知道现在的简书,给钱才给推阅读量,希望吧,大家都能看到。
上图中,三种输出结果相同,怕有人不理解,再说说,第二行this是一个指针,用箭头成员获取操作符直接操作var,这是C中的功能,为了方便程序员。否则就要像第三行,先取值拿到地址,然后在用.操作符获取成员变量,非常繁琐。
怎么说呢,石老师讲成员函数内存空间是不算在类内的,这么看来,this虽然是在类内调用了,实则是在类外的,和C结构体那个差不多,应该只是把this指针传参进函数了。函数内结构体指针修改指向的结构体变量的值不是很easy吗?我们简直都可以自己用C写个Cppp了,哈哈,就是没钱搞。
这里再提一下,方法到底是什么,可能很多人都知道方法是函数,具体并不清楚,昨天在w3c看到方法的说明。
非常明确的指出,方法就是属于类的函数,无论是类内实现还是类内实现,只要是类的成员函数即可。
真的是精华,言简意赅。
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass(int a) : var(a)
{ }
void printInfo() {
cout << var <<endl;
cout << this->var <<endl;
cout << (*this).var <<endl;
}
private:
int var;
};
int main() {
MyClass obj(42);
obj.printInfo();
}
代码拷出来了,想试试自己搞。
只有成员函数有this指针,也就是说,有this指针的函数就可以修改成员变量了哈哈。懂我意思了吗?懂了自己去试试,我明天试试,有结果就发出来,木有就算了。我觉得肯定有。
差不多讲完了,再见吧。
––共享知识,迎接未来,我是美玉东番。