我确实在 StackOverflow 上发现了一些具有类似标题的问题,但是当我阅读答案时,他们关注的是问题的不同部分,这些部分非常具体(例如 STL/容器)。
有人可以告诉我,为什么必须使用指针/引用来实现多态性吗?我可以理解指针可能会有所帮助,但是引用肯定只能区分按值传递和按引用传递吗?
当然,只要你在堆上分配内存,这样你就可以进行动态绑定,那么这就足够了。很明显不是。
“当然,只要你在堆上分配内存” - 内存分配到哪里与它无关。这都是关于语义的。举个例子:
Derived d;
Base* b = &d;
d
位于堆栈上(自动内存),但多态性仍然有效b
.
如果您没有基类指针或对派生类的引用,则多态性不起作用,因为您不再拥有派生类。拿
Base c = Derived();
The c
对象不是一个Derived
, but a Base
, 因为slicing。所以,从技术上讲,多态性仍然有效,只是你不再拥有Derived
谈论的对象。
Now take
Base* c = new Derived();
c
只是指向内存中的某个位置,而你并不真正关心它是否真的是一个Base
or a Derived
,但是调用virtual
方法将被动态解析。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)