如果 本类实例 与 同类另一实例 的元素 不加说明会发生混淆,则应以this指针指出本类实例的元素。
试以 全国计算机二级考试真考题库(未来教育)第20套第一道操作题的部分程序代码为例:
class Point{
double x,y;
public:
Point(double x=0.0, double y=0.0)
// **********found**********
double getX()const{ return x; }
double getY()const { return y; }
void show() const { cout << '(' << x << ',' << y << ')';}
};
问,要把Point(double x=0.0, double y=0.0)中的x和y赋值给本类实例的x和y,
则// **********found**********此处应写什么?
: x(x), y(y){}
这是使用初始化参数函数列表的写法。
显然就是使用()中传入的x去初始化本类的x,而y同理,()中的x,y显然来自于Point(double x, double y),只能这样理解,反过来理解是说不通的。我没有研究过这里初始化参数函数列表的具体设计原理,但不妨猜想一下:它设计为x()和y()所初始化的对象都是本类的x和y,而()中则默认来自构造函数的传参。
或