This指针
前奏:
#include<iostream>
using namespace std;
class Cstu
{
public:
int a;
Cstu(int a)
{
a = a; //此时,构造函数里的a,只是函数里的,把外面的a覆盖了
}
void print()
{
cout << a << endl;
}
};
int main()
{
Cstu stu(12);
stu.print();
system("pause");
return 0;
}
鉴于上面a的问题,C++提供了区别a的方法:this指针。
Cstu(int a)
{
this->a = a;
//用this指针区别a this指针指向当前对象Cstu*,即可以直接访问成员了
}
1.作用:
a.区分同名变量
b.是指向当前对象的指针 即可通过指针访问成员
this->print();
c.得到对象地址
重要:
类内的指针类型函数返回地址(返回的是地址时要用指针函数),在主函数中就要用类的指针类型去指向
Cstu* Getaddress() //this是指针
{
return this; //得到对象地址
}
//主函数调用 p是Cstu*类型的指针 即类指针
Cstu*p = stu.Getaddress(); //定义类的指针接类内对象的地址
得到对象地址的代码:
class Cstu
{
public:
int a;
Cstu(int a)
{
this-> a = a;
//用this指针区别a this指针指向当前对象Cstu*,即可以直接访问成员了
this->print();
}
void print()
{
cout << a << endl;
}
Cstu* Getaddress() //this是指针
{
return this; //得到对象地址
}
}
int main()
{
Cstu stu(12);
stu.print();
//Getaddress()返回的类型是Cstu*,用类指针去接
Cstu*p = stu.Getaddress(); //定义类的指针接类内对象的地址
p->print();//此时就可以直接用p指针指向函数了
cout << p << endl;
system("pause");
return 0;
}
特别注意:
上面定义的p是类指针,可以直接通过p来调用函数成员
d.得到对象
Cstu* Getaddress() //this是指针,用Cstu*函数名()
{
return *this; //得到对象
}
int main()
{
Cstu stu(12);
stu.print();
Cstu*p = stu.Getaddress(); //定义类的指针接类内对象的地址
cout << *p << endl;
system("pause");
return 0;
}
2.注意:
a.对象创建时才有,没有对象就没this指针
b.类型是 对应对象的类的指针的类型 如下:
Cstu(int a)
{
this->a = a; //this是stu对应类的指针类型 即Cstu*
}
//主函数调用
Cstu stu(12);
c.this指针不是成员 是类成员函数的隐含参数
即在函数参数中,有一个隐式参数,让我们可以写this
class Cstu
{
public:
int a;
//this ->a; //写在成员函数外不行
Cstu(int a)
{
this-> a = a;
}
void print()
{
this->a;
cout << a << endl;
}
};
d.作用域是在类内部,系统默认传递给函数(非静态函数)的隐含参数
如上所述,只能在函数成员内写this