this 指针是成员函数中的一个隐藏的形参,this指针指向实例化对象自身。
(实例化对象:类类型定义的变量 或者 new出来的变量)
1.成员函数的形参表中不能使用this
2.在构造函数的初始化表中不能使用this
3.在成员函数的函数体中可以使用this
例:
#include <iostream>
using namespace std;
class Student{
private:
string name;
int age;
public:
void init_student(string n,int a){
cout<<"this = "<<this<<endl;
this->name = n;
age = a;//这种不写this的 默认都是this
}
int get_age(){
return age;
}
/*
int get_age( Student *this){
return this->age;
}
*/
};
int main(int argc, const char *argv[])
{
Student s1;
s1.init_student("xiaoming",18);
cout<<"&s1 = "<<&s1<<endl;
cout<<"----------------------"<<endl;
Student s2;
cout<<"&s2 = "<<&s2<<endl;
s2.init_student("xiaohong",20);
return 0;
}
一种使用this指针的场景:
成员函数的形参名和成员变量名冲突时,
防止局部优先,形参给自身赋值
#include <iostream>
using namespace std;
class Student{
private:
string name;
int age;
public:
void init_student(string name,int age){
//name = name;//使用变量采用局部优先原则
//也就是说,两个name都是形参的name 并没有给成员变量赋值
//age = age;
this->name = name;
//Student::age = age;//也可以,一般不这样用,
//类名::变量名 这种格式一般是静态成员变量的访问方式
}
void print_info(){
cout<<age<<endl;
}
};
int main(int argc, const char *argv[])
{
Student s1;
s1.init_student("xiaoming",18);
s1.print_info();
return 0;
}
必须使用this的场景:
成员函数需要返回自身的引用时(---运算符重载时讲)