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对象的别名?
展开
 我来答
wanglixin1001
2012-12-04 · TA获得超过4174个赞
知道大有可为答主
回答量:1758
采纳率:80%
帮助的人:876万
展开全部
是的,他的这段话有问题,“它只是b1中基类部分的别名”是不正确的。
引用初始化后,只要改引用的对象存在,它就保持绑定到初始化时指向的对象,不可能绑定到其它的对象。
所以r=b1; 这句话只能理解为赋值语句,使用b1中基类部分的值来赋值a1(r是a1的别名)。这时会截断出派生类中的基类部分给基类对象。
追问
我的理解就是你这样的,但是你确定是书上写错了么,如果肯定的话,谢谢你了
追答
是的,可以肯定。就像int a =1; int &r=a; r =2; 一样,使用r来改变a的值。
“引用初始化后,只要改引用的对象存在,它就保持绑定到初始化时指向的对象,不可能绑定到其它的对象。”这段话在c++ primer这本书中有,没错的。
zjfaok
2012-12-04 · TA获得超过6806个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1607万
展开全部
谭浩强的书本来问题就很大,错误又不只有这一处……

r被初始化为a1的引用,就不可能再变成别的对象的引用了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式