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

隐藏和虚函数

没加virtual前, Shape、Circle、Rect的double calcArea()函数同名,且参数相同,为什么Shape *shape1 = new Circle(4.0);执行后调用的是Shape中的calcArea()呢?为什么子类的同名函数没有隐藏掉父类的函数呢?

正在回答

2 回答

 继承中:使用指向对象的指针访问类成员时与使用对象直接访问类成员的访问权限和成员隐藏情况是不一样的。 

       ··使用对象直接访问成员时,继承来的子父类成员都可以访问;子父类中有同名成员时,子类一定覆盖父类。·· 

       ··使用指向子类的父类指针时,只可直接访问的是父类成员,基类成员函数前加virtual且子类中有同名函数时才会使用子类的该成员函数。


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

因为你定义的是Shape类型的指针,Shape类里面的函数不虚,就被调用了。

Shape中的函数被定义成虚函数才能生成虚函数列表指向子类的虚函数。

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

举报

0/150
提交
取消
C++远征之多态篇
  • 参与学习       66208    人
  • 解答问题       334    个

本教程将带领大家体会面向对象三大特性中的多态特性

进入课程

隐藏和虚函数

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

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

帮助反馈 APP下载

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

公众号

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