为了账号安全,请及时绑定邮箱和手机立即绑定

在菱形继承中的一个疑问

为什么执行p->Farmer::printColor();
                    p->Worker::printColor();
后,在输出中是 Farmeryellow
                              Person--printColor
                              Workeryellow
                              Person--printColor
这样?他们的执行顺序是怎么来的
在void Person::printColor中还有cout<<m_strcolor<<endl;呢?
                             

正在回答

3 回答

先建立父类对象,因为构造函数关系,又先执行,之后才是子类对象,就这么简单啊

0 回复 有任何疑惑可以回复我~

p->Farmer::printColor()和p->Worker::printColor();执行的都是类Person中的printColor()函数,而在头文件中加上虚继承关键字virtual之前,类Person的函数被worker和farmer继承,所以Person的默认值即你问的“m_strColor”被Farmeryellow和Workeryellow覆盖。至于执行顺序,就是Person类中的printColor()函数函数体中的的内容,先输出m_strColor,再输出"Person--printColor()",这样说应该清晰一点吧!

0 回复 有任何疑惑可以回复我~

同求~

0 回复 有任何疑惑可以回复我~
#1

慕圣2268672

p->Farmer::printColor()和p->Worker::printColor();执行的都是类Person中的printColor()函数,而在头文件中加上虚继承关键字virtual之前,类Person的函数被worker和farmer继承,所以Person的默认值即你问的“m_strColor”被Farmeryellow和Workeryellow覆盖。至于执行顺序,就是Person类中的printColor()函数函数体中的的内容,先输出m_strColor,再输出"Person--printColor()",这样说应该清晰一点吧!
2017-09-04 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之继承篇
  • 参与学习       75188    人
  • 解答问题       251    个

继承,C++面向对象三大特征之一,通过编码实践方式讲解到操作层面

进入课程

在菱形继承中的一个疑问

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号