c++继承的问题
c++primer中有如下的描述:如果是public继承,则用户代码和后代类都可以使用派生类到基类的转换。如果类是使用private或protected继承派生的,则用户...
c++ primer中有如下的描述:
如果是 public 继承,则用户代码和后代类都可以使用派生类到基类的转换。如果类是使用 private 或 protected 继承派生的,则用户代码不能将派生类型对象转换为基类对象。如果是 private 继承,则从 private 继承类派生的类不能转换为基类。如果是 protected 继承,则后续派生类的成员可以转换为基类类型。
看了好几遍还是不大明白,求大神带例子的讲解!!! 展开
如果是 public 继承,则用户代码和后代类都可以使用派生类到基类的转换。如果类是使用 private 或 protected 继承派生的,则用户代码不能将派生类型对象转换为基类对象。如果是 private 继承,则从 private 继承类派生的类不能转换为基类。如果是 protected 继承,则后续派生类的成员可以转换为基类类型。
看了好几遍还是不大明白,求大神带例子的讲解!!! 展开
2个回答
展开全部
首先你一定要理解三种继承的区别,另外要清楚这里说的转换是 指针类型 的转换。
这个问题要解释清楚比较复杂,我简单逐句使用实例给你演示说明一下。
类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中的元素的了,连访问成员都做不到更谈不到转换了
实际上就我个人感觉来说,问题中的用语是很不清晰的,因为毕竟是翻译过来的,我们学习的时候也没有必要总抱着一本书来学习,多读一些互相对照才能更准确的理解
这个问题要解释清楚比较复杂,我简单逐句使用实例给你演示说明一下。
类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中的元素的了,连访问成员都做不到更谈不到转换了
实际上就我个人感觉来说,问题中的用语是很不清晰的,因为毕竟是翻译过来的,我们学习的时候也没有必要总抱着一本书来学习,多读一些互相对照才能更准确的理解
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询