课程
/后端开发
/C++
/C++远征之继承篇
为什么这里的MigrantWorker传入的yellow的颜色值可以传递到顶层父类Person中,能够打印出来,而在后面的用了virtual虚继承后打印出来的就是默认值blue?
2016-06-05
源自:C++远征之继承篇 6-3
正在回答
上面同学也说了,但我猜测,为什么不能传递呢,是由于虚继承的时候,为了避免多次出现Person的定义以及成员的传递,它干脆强制将顶层父类的成员以影印的方式传递一份下来,这样子就能避免你往顶层父类传递参数的时候,再次往下传到子类时出现重复。
例如你图片中的情况,实际上就有两个顶层父类传下来的color,如果不禁止你往回传递参数的话,无法将 只需要一份的color成员 传递参数值的‘权利’给Worker或Farmer,这时如果都有权利望顶层父类Person传递color的话,势必会导致MigrantWorker有两个color。因此它干脆不让你传递回去了。
虚继承中,顶层父类无法接受子类的参数传递,所以只能打印出来默认值blue,老师在讲课的时候稍微提了下。如果有兴趣的话可以自己通过编程验证一下。
举报
继承,C++面向对象三大特征之一,通过编码实践方式讲解到操作层面
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号