gpt4 book ai didi

c++ - 为什么多态性在没有指针/引用的情况下不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:34 24 4
gpt4 key购买 nike

我确实在 StackOverflow 上发现了一些标题相似的问题,但是当我阅读答案时,他们关注的是问题的不同部分,这些部分非常具体(例如 STL/容器)。

有人可以告诉我,为什么必须使用指针/引用来实现多态性吗?我可以理解指针可能会有所帮助,但肯定引用只区分按值传递和按引用传递?

当然只要你在堆上分配内存,这样你就可以有动态绑定(bind),那么这就足够了。显然不是。

最佳答案

“当然,只要你在堆上分配内存”——内存分配的位置与它无关。这都是关于语义的。举个例子:

Derived d;
Base* b = &d;

d 在堆栈上(自动内存),但多态性仍将对 b 起作用。

如果您没有基类指针或对派生类的引用,多态性就不起作用,因为您不再拥有派生类。拿

Base c = Derived();

c 对象不是Derived,而是Base,因为切片。因此,从技术上讲,多态性仍然有效,只是您不再需要谈论 Derived 对象。

现在拿

Base* c = new Derived();

c 只是指向内存中的某个位置,您并不关心它实际上是 Base 还是 Derived,但是对 virtual 方法的调用将被动态解析。

关于c++ - 为什么多态性在没有指针/引用的情况下不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51810264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com