C++中的this指针

基本概念

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;

}

参考