C++引用问题,
谭浩强的C++中有这样一段:Aa1;//定义基类A的对象a1Bb1;//定义公用派生类B对象b1A&r=a1;//定义基类A对象的引用变量r,并用a1对其初始化r=b1;...
谭浩强的C++中有这样一段:
A a1;//定义基类A的对象a1
B b1;//定义公用派生类B对象b1
A&r=a1;//定义基类A对象的引用变量r,并用a1对其初始化
r=b1;//用派生类B对象b1对a1的引用变量r赋值
注意:此时r不是b1的别名,也不与b1共享一段存储单元。它只是b1中基类部分的别名,与b1中基类部分共享同一段存储单元,r与b1具有相同的起始地址
我对"注意"的这段解释不明白,r一开始就被指名为是a1对象的别名,r不是b1的别名,也不与b1共享一段存储单元我赞同,但是引用已经指定是谁的别名就一直是谁的啊,怎么又成了b1中基类部分的别名了?难道它不再是a1对象的别名? 展开
A a1;//定义基类A的对象a1
B b1;//定义公用派生类B对象b1
A&r=a1;//定义基类A对象的引用变量r,并用a1对其初始化
r=b1;//用派生类B对象b1对a1的引用变量r赋值
注意:此时r不是b1的别名,也不与b1共享一段存储单元。它只是b1中基类部分的别名,与b1中基类部分共享同一段存储单元,r与b1具有相同的起始地址
我对"注意"的这段解释不明白,r一开始就被指名为是a1对象的别名,r不是b1的别名,也不与b1共享一段存储单元我赞同,但是引用已经指定是谁的别名就一直是谁的啊,怎么又成了b1中基类部分的别名了?难道它不再是a1对象的别名? 展开
展开全部
是的,他的这段话有问题,“它只是b1中基类部分的别名”是不正确的。
引用初始化后,只要改引用的对象存在,它就保持绑定到初始化时指向的对象,不可能绑定到其它的对象。
所以r=b1; 这句话只能理解为赋值语句,使用b1中基类部分的值来赋值a1(r是a1的别名)。这时会截断出派生类中的基类部分给基类对象。
引用初始化后,只要改引用的对象存在,它就保持绑定到初始化时指向的对象,不可能绑定到其它的对象。
所以r=b1; 这句话只能理解为赋值语句,使用b1中基类部分的值来赋值a1(r是a1的别名)。这时会截断出派生类中的基类部分给基类对象。
追问
我的理解就是你这样的,但是你确定是书上写错了么,如果肯定的话,谢谢你了
追答
是的,可以肯定。就像int a =1; int &r=a; r =2; 一样,使用r来改变a的值。
“引用初始化后,只要改引用的对象存在,它就保持绑定到初始化时指向的对象,不可能绑定到其它的对象。”这段话在c++ primer这本书中有,没错的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询