C++中的this指针
2017-12-20
基本概念
this只能在成员函数中使用。全局函数,静态函数都不能使用this指针。实际上,成员函数默认第一个参数为T *const register this。
this指针只有在成员函数中才有意义。因此,你获得一个对象后,也不能通过对象使用this指针。当然,在成员函数里,是可以知道this指针的位置的。
假如this指针锁在类的类型是T类型,并且如果成员函数是非常量的,则this的类型是T * const类型,即一个指向非const T对象的const指针;假如成员函数是常量类型,则this指针的类型是一个指向const T对象的const指针。
this指针的使用
- 通过. ->进行访问
#include<iostream>
#include<string>
using namespace std;
class Stu_Info_Mange
{
int sno;
string sname;
int age;
int grade;
public:
Stu_Info_Mange(int s=0,string n="",int a=0,int g=0)
{
sno=s;
sname=n;
age=a;
grade=g;
}
void Setsname(int sn) //使用this指针进行赋值
{
this->sname=sn;
}
int Setage(int a)
{
this->age=a;
return (*this).age; //使用this指针返回该对象的年龄
}
void print()
{
cout<<"the sname is "<<this->sname<<endl; //显式this指针通过箭头操作符访问
cout<<"the sno is "<<sno<<endl;//隐式使用this指针打印
cout<<"the age is "<<(*this).age<<endl;//显式使用this指针通过远点操作符
cout<<"the grade is "<<this->grade<<endl<<endl;
}
};
int main()
{
Stu_Info_Mange sim1(761,"张三",19,3);
sim1.print(); //输出信息
sim1.Setage(12); //使用this指针修改年龄
sim1.print(); //再次输出
return 0;
}
- 级联操作
#include<iostream>
#include<string>
using namespace std;
class Stu_Info_Mange
{
int sno;
string sname;
int age;
int grade;
public:
Stu_Info_Mange(int s=0,string n="",int a=0,int g=0)
{
sno=s;
sname=n;
age=a;
grade=g;
}
Stu_Info_Mange &Setsname(string s) //所有的相关函数,都返回该对象的引用,这样就可以实现级联,方便编码
{
this->sname=s;
return (*this);
}
Stu_Info_Mange & Setsno(int sno)
{
this->sno=sno;
return *this;
}
Stu_Info_Mange &Setgrade(int grade)
{
this->grade=grade;
return *this;
}
Stu_Info_Mange &Setage(int age)
{
this->age=age;
return *this;
}
void print()
{
cout<<"the sname is "<<this->sname<<endl;
cout<<"the sno is "<<this->sno<<endl;
cout<<"the age is "<<this->age<<endl;
cout<<"the grade is "<<this->grade<<endl<<endl;
}
};
int main()
{
Stu_Info_Mange sim;// 使用默认参数
sim.Setsname("张三").Setsno(457).Setgrade(2012).Setage(20); //级联
//使用this指针使串联的函数调用成为可能
sim.print();
return 0;
}