背景
上课讲到类的时候就简单提了一下,但是慢慢后面学习构造、析构、拷贝构造,再到后面重写String类的函数的时候,明显感觉自己对this指针理解的是在太过浅薄,因此回来补一下。
(书本上)this关键字:
用于区别局部变量和成员变量
只能在类成员函数中使用,指向调用该成员函数的对象
解释
在类中,用户自定义了一个class A,其中有成员变量和成员函数,当我们在主函数创建这个类的对象的时候就相当于是走进了A房间。在你进入房间后,你可以看见你曾经“买”回来的各种家具用品(成员变量和成员方法),但是房子A的全貌你已经看不见了。
this指针的作用就是可以永远指向这个类A。this的类型就是A *,对其返回return *this; 其实就是返回了类A类型的变量。
为什么会有this指针的出现
通常在class定义时要用到类型变量自身,因为这时候还不知道变量名(为了通用也不可能固定实际的变量名),就用this这样的指针来使用变量自身。
形如java定义student类时候写的get()和set()函数,其中就是因为在定义类的时候还不知道后面引用时会传入哪个变量。
“我用一个类 类型的指针指向成员变量,用以接收创建对象时候传过来的变量”
例子
java 中 写某个类的时候
public class student {
int num;
char name;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public char getName() {
return name;
}
public void setName(char name) {
this.name = name;
}
}
C++中写类的拷贝构造函数(深拷贝):
student(const student &s){
num = s.num;
this->name = new char[strlen(s.name) + 1];
strcpy(this->name,s.name);
}
this的两个使用:
一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。
this指针记录每个对象的内存地址,然后通过运算符->访问该对象的成员