该程序的输出是:
A :: Fun C :: Do
为什么不是:
A :: Fun A :: do
主要是关于虚函数的工作原理,但我并不熟悉它,实际上我完全是C ++的新手,真的需要你的耐心,谢谢。
UITableViewConroller SummaryTableViewController
答案 0 :(得分:2)
A中的任何一项功能都不是虚拟的。
所以在B中我们有:
Do
和Fun
。p.Fun
非常清楚它调用A::Fun
。
p.Do
它调用C::Fun
因为:
Do
在B
中是虚拟的,C
会覆盖Do
p
是参考类型答案 1 :(得分:1)
调用A::Fun()
在编译时被解析为virtual
。由于它不是A::Fun()
函数,p.Do()
也会在运行时执行。
调用B::Do()
在编译时被解析为virtual
。由于它是C
函数,并且对应于真实对象的类型C::Do()
具有重写的实现,因此android:theme="@style/Theme.AppCompat.Dialog"
在运行时执行。
答案 2 :(得分:0)
输出结果为
A::Fun
C::Do
原因是B继承自A
,然后类B
没有自己的函数fun
,所以非常期待。转到下一个输出,结果是即使引用类B
调用Do
,它也会成为对派生类C
的调用,为什么会这样?
当方法变为虚拟时,调用不再决定调用它的对象的数据类型,而是决定对该方法的调用的地址。由于方法Do
是虚拟的。电话现在在地址上,地址基本上属于' C',因此调用了C
' s Do
,我希望你能得到它。