![]() |
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. 这让人奇怪,你问了你一个问题。是什么让你期望有所不同? |
![]() |
Fernando Chu · 一个变量有多个可能的类?[关闭] 6 月前 |
![]() |
Amaterastis · 基类接受子类和内部子类的模板参数 7 月前 |
![]() |
Rishab Negi · 这个关键字在抽象类中是如何工作的 7 月前 |
![]() |
dEmigOd · 类层次结构中的运算符重载解析 7 月前 |
![]() |
TableTopRug · 如何从Kotlin中的密封类继承? 8 月前 |
![]() |
hasdrubal · 抽象基类函数指针python 11 月前 |
|
Josh · 通过反思访问孩子的财产 12 月前 |