派生类到基类转化的可访问性?

chenhua_chch 2008-05-16 11:43:00
用代码表达下面一段话的意思!
如果是public继承,则用户代码和后代类都可以使用派生类到基类的转换,如果类是使用private或protected继承派生的,则用户代码不能将派生类型对象转换为基类对象.如果是private继承,则从private继承类派生的类涌转换为基类,如果是protected继承,则后续少生类的成员可以转换为基类类型!
...全文
124 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zichuan1997 2009-03-01
  • 打赏
  • 举报
回复
代码要验证啊!!!
C++primer里也有错啊!!!
iambic 2008-05-16
  • 打赏
  • 举报
回复
class B: A
{
};
A* = new B; //error
taodm 2008-05-16
  • 打赏
  • 举报
回复
你做过啥尝试了?
tg15 2008-05-16
  • 打赏
  • 举报
回复
重写一遍,清楚点.

class A{};

class B:public A{};
class C:protected A{};
class D:private A{};

class E:public B{};
class F:public C{};
class G:public D{};

void main(){
A *pb, *pc, *pd, *pe, *pf, *pg;
pb = new B; // 正确 public派生,可以转换[*B ---> *A].
pc = new C; // 错误 protected派生,不可转换[*C -\-> *A].
pd = new D; // 错误 private派生,不可转换[*D -\-> *A].
pe = new E; // 正确 public派生的子类,可以转换[*E ---> *A].
pf = new F; // 错误(按话的意思是正确,但VC编译是错误)protected派生的子类.
pg = new G; // 错误 private派生的子类,不可转换[*G -\-> *A].
}
tg15 2008-05-16
  • 打赏
  • 举报
回复

class A{};
class B:public A{};
class C:protected A{};
class D:private A{};
class E:public C{};
class F:public D{};

void main(){
A *pb, *pc, *pd, *pe, *pf;
pb = new B; // 正确
pc = new C; // 错误
pd = new D; // 错误
pe = new E; // 错误(按话的意思是正确,但VC编译是错误)
pf = new F; // 错误
}

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧