小白请教一道题目

dayoumingqi 2018-09-07 09:59:56


求输出
答案是classB:58
classA:Hello
请教大神们 这是为什么,最后调用的两个函数为什么不一样 谢谢了
...全文
433 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dayoumingqi 2018-09-19
  • 打赏
  • 举报
回复
引用 9 楼 hou09tian 的回复:

func(int data)函数是虚函数,是基类A希望派生类覆盖的函数;func(char* str)函数是普通的成员函数,是基类A希望派生类B直接继承而不要改变的函数。所以输出的结果不同。

请参考《C++中的虚函数简介(上)》
希望能够帮到你


太谢谢了
dayoumingqi 2018-09-19
  • 打赏
  • 举报
回复
引用 5 楼 fl_dream 的回复:
类B继承类A,类A中virtual void func(int data)注意加了virtual,说明这是个虚函数,子类发生了重写,pA=&b;这是父类指针指向子类对象,满足了多态性的发生条件。所以会在执行时发生动态联编,即迟绑定,所以最迟执行的是class B中的func。

而void func(char *str);是没有加virtual的,即发生静态绑定,所以执行时还是调用了父类中的func方法。

谢谢大神 感激不尽
ForestDB 2018-09-14
  • 打赏
  • 举报
回复
说不定LZ自己把代码手敲一遍也许会有不同的感觉。
棉猴 2018-09-14
  • 打赏
  • 举报
回复

func(int data)函数是虚函数,是基类A希望派生类覆盖的函数;func(char* str)函数是普通的成员函数,是基类A希望派生类B直接继承而不要改变的函数。所以输出的结果不同。

请参考《C++中的虚函数简介(上)》
希望能够帮到你
AlbertS 2018-09-11
  • 打赏
  • 举报
回复
因为参数为整型的func前面有virtual,被子类重写后,可以产生多态,而参数为字符串的func,只是简单的覆盖,不会产生多态,所以造成了这样的结果
离水的鱼儿 2018-09-11
  • 打赏
  • 举报
回复
5L正解,LZ可以看一下C++ 动态绑定和静态绑定。 面试中经常遇到~
林de 2018-09-10
  • 打赏
  • 举报
回复
类B继承类A,类A中virtual void func(int data)注意加了virtual,说明这是个虚函数,子类发生了重写,pA=&b;这是父类指针指向子类对象,满足了多态性的发生条件。所以会在执行时发生动态联编,即迟绑定,所以最迟执行的是class B中的func。

而void func(char *str);是没有加virtual的,即发生静态绑定,所以执行时还是调用了父类中的func方法。
dayoumingqi 2018-09-09
  • 打赏
  • 举报
回复
引用 2 楼 zangpi124877 的回复:
楼主啊,你是怎么插图的,为什么我发贴不行,戳的哪里?

电脑发帖有插图啊
dayoumingqi 2018-09-09
  • 打赏
  • 举报
回复
引用 1 楼 wanggui2015 的回复:
第一个是因为C++的多态特性啊

那第二个是怎么回事呢
wallesyoyo 2018-09-08
  • 打赏
  • 举报
回复
第一个是因为C++的多态特性啊
zangpi 2018-09-08
  • 打赏
  • 举报
回复
楼主啊,你是怎么插图的,为什么我发贴不行,戳的哪里?

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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