c++继承的问题

c++primer中有如下的描述:如果是public继承,则用户代码和后代类都可以使用派生类到基类的转换。如果类是使用private或protected继承派生的,则用户... c++ primer中有如下的描述:
如果是 public 继承,则用户代码和后代类都可以使用派生类到基类的转换。如果类是使用 private 或 protected 继承派生的,则用户代码不能将派生类型对象转换为基类对象。如果是 private 继承,则从 private 继承类派生的类不能转换为基类。如果是 protected 继承,则后续派生类的成员可以转换为基类类型。
看了好几遍还是不大明白,求大神带例子的讲解!!!
展开
 我来答
wangmingsuyang
2012-10-30 · TA获得超过317个赞
知道小有建树答主
回答量:132
采纳率:0%
帮助的人:105万
展开全部
首先你一定要理解三种继承的区别,另外要清楚这里说的转换是 指针类型 的转换。
这个问题要解释清楚比较复杂,我简单逐句使用实例给你演示说明一下。
类A{...};作为基类
1、 公有继承派生类B:public A{...}现在B具有A中public和protect属性了,定义A a 和B b,
public 继承,则用户代码和后代类都可以使用派生类到基类的转换:
A* c = &b 这是允许的,因为B是公有继承的A;但反之就不允许了,相信这个你是理解的
2、private 或 protected 继承派生的,则用户代码不能将派生类型对象转换为基类对象。
这句话也很容易理解,因为保护继承的话B:protect A{...},A中public元素在B中是protect的。
而类似的私有继承的所有元素都是私有的,当然不允许指针转换了;

“如果是 private 继承,则从 private 继承类派生的类不能转换为基类。如果是 protected 继承,则后续派生类的成员可以转换为基类类型。”这两句要注意是指的继承类再次派生的子类,如下:
A{...}
B:protect A{}
C:public B{}这样继承B就作为C的基类了,C类中拥有A类中的所有属性,只不过A中public成员变成了protect成员了,但是作为子类仍然可以操作这个成员;

D:private A{}
E:public D{}这样继承E中其实是继承不到任何属于A中的元素的了,连访问成员都做不到更谈不到转换了

实际上就我个人感觉来说,问题中的用语是很不清晰的,因为毕竟是翻译过来的,我们学习的时候也没有必要总抱着一本书来学习,多读一些互相对照才能更准确的理解
love寒忆
2012-10-18 · TA获得超过360个赞
知道小有建树答主
回答量:375
采纳率:0%
帮助的人:252万
展开全部
我说错了。我理解错了。不好意思
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式