this指针是作用于成员函数的指针,是成员函数的隐含参数。所以我们通常用this指针在成员函数内部指向调用对象。同时,this指针也是一个用于结局成员函数内部名称冲突的方法
class Role
{
public:
int power;
Role(int power)
{
this->power = power;
}
};
那么使用this指针与链式编程有什么关系呢?请看以下实例:
class Role
{
public:
Role(int power)
{
this->power = power;
}
void PersonAddAge(Role& p)
{
this->power += p.power;
}
int power;
};
void test01()
{
Role r1(20);
Role r2(10);
r2.RoleAddPower(r1);
cout << "r2的力量为:" << r2.power << endl;
cout << "r1的力量为:" << r1.power << endl;
}
这里我们可以轻易得出: 但是如果我们认为r2的的力量值还不够,要怎么办,我们会想到,在r2原本的基础上继续增加几次
r2.RoleAddPower(r1).RoleAddPower(r1).RoleAddPower(r1);
理论上,这样的写法能够使数字提高到70,但这样却会出现报错为“错误(活动) E0153 表达式必须具有类类型,但它具有类型 “void” ”,而解决方法就得把
void PersonAddAge(Role& p)
{
this->power += p.power;
}
改成
Role& RoleAddPower(Role& p)
{
this->power += p.power;
return *this;
}
因为如果用值的方式返回,它会返回新的对象,用引用则不会。 完整代码:
class Role
{
public:
Role(int power)
{
this->power = power;
}
Role& RoleAddPower(Role& p)
{
this->power += p.power;
return *this;
}
int power;
};
void test01()
{
Role r1(20);
Role r2(10);
r2.RoleAddPower(r1).RoleAddPower(r1).RoleAddPower(r1);
cout << "r2的力量为:" << r2.power << endl;
cout << "r1的力量为:" << r1.power << endl;
}
这样就构成了最简单的链式编程。
|