this指针

每个类成员函数都只涉及一个对象,即调用它的对象。但有时候可能涉及两个对象,这种情况下需要使用C++的this指针。

到底怎么使用this指针呢,请看下面这个示例:

class Student//学生类
{
	
private:
	string name;//姓名
	int grade;//成绩
};

这有一个学生类,私有成员包括name和grade 。

接着,创建了两个对象stu1,stu2。并对它们进行了初始化。

    string s = "花花";
	string s1 = "瓜瓜";
	Student stu1(s,90);//创建一个stu1对象,并用提供的数据初始化
	Student stu2(s1, 91);

现在我想找出这两个对象中成绩更高的那个,并把它打印出来。

因此我们需要定义一个比较函数来比较这两个对象的成绩,可是问题来了,类成员函数只涉及一个对象,即为调用它的对象。比如:

stu1.comgrade()将访问stu1对象的数据 ; stu2.comgrade()将访问将访问stu2的对象的数据。

如果希望该方法对两个对象进行比较,则必须将第二个对象作为承诺书传递给它。处于效率考虑,我们按引用来传递参数,也就是说 comgrade()方法使用一个类型为const Student &的参数。

其次,怎么将方法答案传递传回调用程序呢?最直接的方法是返回一个引用,该引用指向成绩更高的对象。因此,这个函数原型如下:

const Student & comgrade(const Student & s) const;

假设要比较stu1 , stu2 这两个对象,并且成绩更高的那个对象赋给max对象,可以使用以下这两个语句

max=stu1.comgrade(stu2);
max=stu2.comgrade(stu1);

无论使用哪个语句,都将对这两个对象进行比较,并将返回成绩更高的那一个对象。下面来看一下该函数的实现。

const Student & Student:: comgrade(const Student& s) const
	if (s.grade > grade)
		return s;
	else
		return ???;
}

假设使用上面的第一条语句,那么s是stu2的别名/引用,但stu1没有别名。

那么这时候this指针就发挥作用了。


this指针指向用来调用成员函数的对象(this作为隐藏参数传递给方法)。

在这里this指向stu1,this设置为stu1的地址。

然而要返回的并不是地址this,而是对象本身,即*this。现在可以将*this作为调用对象别名来完成前面的定义。

const Student & Student:: comgrade(const Student& s) const
{
	if (s.grade > grade) 
        return s;
	else
		return *this;
}

提醒:返回类型为引用意味着返回的是调用对象本身,而不是副本。

你可能感兴趣的:(c++)