1
15
注意
你要做的是通过
slicing
:它只是具有
|
2
3
场景2创建了一个全新的基本类型的对象。因此,当我们这样做的时候
然而,在场景1中,对象实际上是派生的实例,我们通过基指针访问它。这正是虚拟函数设计的情况;使用派生类的实现。 |
3
1
如果您稍微考虑一下实现,这会有所帮助。在第二个场景中,您实际上正在创建一个新的基本类型的对象,该对象将随新的虚拟函数表一起提供。但在第一种情况下
|
4
1
作为其他答案的补充。 场景2中发生的事情的技术术语是对象切片。 这是维基百科的词条: http://en.wikipedia.org/wiki/Object_slicing 还有一个关于对象切片的stackoverflow的问题: |
5
1
第一种情况是
第二种情况是类的新对象
|
6
0
多态性对引用(指针取消引用的结果)的作用与对指针的作用相同。 |
7
0
你所说的“因为它已经被取消引用”是什么意思? 基类指针obj指向派生类对象,由于您声明了函数foo()virtual,因此将调用派生类foo()。 |
8
0
(这个问题很奇怪。我宁愿有人问为什么在第二种情况下
在C++语言中,调用虚拟函数的哪一个版本完全独立于什么和什么没有被“去引用”。取消引用没有任何区别。唯一重要的是 动态类型 调用中使用的对象。
在第一种情况下
在第二种情况下,动态类型
In other words, everything works as expected. 这让人奇怪,你问了你一个问题。是什么让你期望有所不同? |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |