所谓this指针,是一个指针,且这个指针用于类函数定义内部,指向当前对象(的地址)。
this指针的特点:
①只能用于类定义内部;
②使用方法同结构指针,即使用运算符“->”;
③指向的是当前对象,即对象a使用这个类方法,其this指针指向的是对象a;
④this->私有成员 这个在大多数情况下,和只用私有成员效果是一样的,但是若参数名和私有成员名相同,那么这种表示方法表示的是当前对象的私有成员,而同名参数表示的是参数的值。
如代码:
#include<iostream>
#include<string>
class man
{
private:
std::string name;
int a;
public:
man(char* x="no name",int b=0)
{
name = x;
a = b;
}
void bigger(int a)const
{
std::cout <<(this->a > a ? this->a : a) << std::endl; //使用?:运算符
}
man less(const man& b)const //引用一个类对象,分别输出。返回引用
{
std::cout << "-----------" << std::endl;
std::cout << name << ": " << a << std::endl;
std::cout << this->name << ": " << this->a << std::endl;
std::cout << b.name << ": " << b.a << std::endl;
std::cout << "-----------" << std::endl;
if (this->a > b.a)return *this; //注意,如果是返回的是引用,那么返回的引用也应该是被const限定(因为函数的私有对象被限定了)
else return b;
}
void show() //输出
{
std::cout << name << ": " << a << std::endl;
}
};
int main()
{
man a{ "aaa",5 };
man b = { "bbb" ,10 };
a.bigger(20); //调用a的方法,和参数比较,输出大的数字
man c = a.less(b); //声明一个新对象,是调用对象a的方法的返回值
c.show(); //输出新对象
system("pause");
return 0;
}
输出:
20
-----------
aaa: 5
aaa: 5
bbb: 10
-----------
bbb: 10
请按任意键继续. . .
总结:
①表示当前对象时,使用 *this
②表示对象中的某个私有成员时,使用 this->私有成员名 或 私有成员名 ;
③当名称冲突时,使用this表示的是当前对象的私有成员,使用名称表示的是冲突的另一个(例如参数名)(见函数void bigger(int a)const);