void output()
{
cout<<"x="<<x<<"y="<<y<<endl;
}
};
void main()
{
point pt(5,5); //调用构造函数,将x,y初始化为5
pt.input(10,10); //调用input函数,将x,y赋值为10???
pt.output();
}程序运行之后,变量x,y的初始化工作是正常的,但是赋值失败,书中给出的解释是由于变量的可见性,x,y在input(int x,int y)这个函数中是不可见的。但是把input(int x,int y)形参换成非x,y就可以了,修改代码,测试下果然可以。
这里便有一疑问,既然x,y在input(int x,int y)这个函数中是不可见的,那么即使换了一个形参,也应该是不可见的,个人感觉点地方应该这么来解释:
void input(int x,int y) {
x=x;
y=y;
}
没有将形参x,y的值赋给类的成员变量x,y并不是因为x,y的可见性,同一个类中的变量不存在不可见性的问题,而是input函数中的x,y 相当与两个局部变量,巧合的是和成员变量同名,作用域的优先级高于成员变量(在css样式表中会这样),于是此函数的功能为形参的自我赋值。
回到this指针,每个对象在创建时都会有一个隐含的this指针指向对象本身。将函数修改为:
void input(int x,int y) {
this.x=x;
this.y=y;
}
由于this指针指向对象本身,当然可以通过this指针指向对象的独有的数据成员,并完成赋值工作。
Ps:又是指针,shit!
继承
派生类成员对基类成员的访问能力
上一页 [1] [2] [3] [4] [5] 下一页