问题标签 [polymorphism]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
10242 浏览

c++ - void* 指针的 C++ 替代方案(不是模板)

看来我对 C++ 有一个根本的误解:<

我喜欢多态容器解决方案。谢谢你,让我注意到这一点:)


所以,我们需要创建一个相对通用的容器类型对象。它也恰好封装了一些业务相关的逻辑。然而,我们需要在这个容器中存储基本上任意的数据——从原始数据类型到复杂类的所有内容。

因此,人们会立即跳到模板类的想法并完成它。但是,我注意到 C++ 多态性和模板不能很好地协同工作。由于有一些复杂的逻辑我们将不得不工作,我宁愿只使用模板或多态性,而不是试图通过使其两者兼而有之来对抗 C++。

最后,鉴于我想做一个或另一个,我更喜欢多态性。我发现表示“这个容器包含 Comparable 类型”之类的约束要容易得多 - 一个 la java.lang.

把我带到问题的话题:最抽象的,我想我可以有一个“容器”纯虚拟接口,类似于“push(void * data)和pop(void * data)”(记录在案) ,我实际上并没有尝试实现堆栈)。

但是,我真的不喜欢顶层的 void*,更不用说每次我想为具体容器可以使用的数据类型添加约束时签名都会发生变化。

总结:我们有相对复杂的容器,有各种方法来检索元素。我们希望能够改变对可以进入容器的元素的约束。元素应该与多种容器一起使用(只要它们满足特定容器的约束)。

编辑:我还应该提到容器本身需要是多态的。这是我不想使用模板化 C++ 的主要原因。

那么 - 我应该放弃对 Java 类型接口的热爱并使用模板吗?我应该使用 void* 并静态转换所有内容吗?或者我应该使用一个空的类定义“元素”,它什么都不声明,并将其用作“元素”层次结构中的顶级类?

我喜欢堆栈溢出的原因之一是,许多回复提供了一些我从未考虑过的其他方法的有趣见解。因此,提前感谢您的见解和评论。

0 投票
6 回答
1398 浏览

c# - 基于类型的条件逻辑

鉴于:

我知道有更好的方法来设计这种类型的交互,但由于细节需要太长时间来解释,这是不可能的。由于这种模式会被重复很多次,我想用一个我可以只使用一行的通用实现来替换条件逻辑。我看不到实现这个通用方法/类的简单方法,但我的直觉告诉我它应该是可能的。

任何帮助,将不胜感激。

0 投票
2 回答
2221 浏览

design-patterns - 多态与继承(示例问题案例)

我仍在尝试围绕设计模式进行思考,并且第二次遇到同样的问题,似乎急需一种模式解决方案。

我有一个具有多种帐户类型的帐户系统。我们有餐厅、酒店、service_provider 和消费者帐户类型。相信未来还会有更多的企业账户类型,当然还有全局管理员账户。

所以我想知道的是如何实现账户类型的切换。例如。每个帐户将有一个或多个配置文件,但配置文件将根据帐户类型而有所不同。我应该在这里使用什么样的类关系来处理多种类型的帐户 - 多态性或继承?

似乎应该有一个其他配置文件应该扩展的抽象基本配置文件类,但我不确定如何实现它(例如配置文件类型和帐户类型之间的连接表?)。

这也感觉像是一个实现工厂模式的机会,我只是不确定如何去做。

请问有什么想法吗?

编辑以提供一些建议的示例:

配置文件因帐户类型而异,例如,餐厅类型的帐户将有菜单、酒单等,酒店类型的帐户将具有房间类型、设施,消费者类型的帐户将具有个人品味, 本国等

问题是哪种设计模式最能实现这些关系。

希望那更清楚,谢谢!

0 投票
6 回答
6491 浏览

c++ - C++ 编译器如何知道要调用哪个虚函数实现?

这是来自http://www.cplusplus.com/doc/tutorial/polymorphism.html的多态性示例(为便于阅读而编辑):

我的问题是编译器如何知道 ppoly1 是 Rectangle 而 ppoly2 是 Triangle,以便它可以调用正确的 area() 函数?它可以通过查看“Polygon * ppoly1 = ▭”行并知道 rect 是一个 Rectangle 来发现这一点,但这并不是在所有情况下都有效,不是吗?如果你做了这样的事情怎么办?

假设您被允许访问该随机内存区域。

我会对此进行测试,但我目前无法在我使用的计算机上进行测试。

(我希望我没有遗漏一些明显的东西......)

0 投票
3 回答
10734 浏览

xsd - XSD 和多态性

我有点重复这个问题,第一次被问错了。

我有这个:

所以基本上我有一个带有内部选项类的 A 类 B 类从 A 类继承,我希望 B.options 从 A.options 继承,这样当我们做 web 服务时,我们只需要传递 a 并且当我们调用 getOptions 时它会返回正确的对象 B.options。目前使用 xsd 的方式,我收到一条错误消息,指出模型组中出现了具有不同类型的名称选项的多个元素。错误属于 B 类型。

0 投票
24 回答
25519 浏览

language-agnostic - 尽可能简单地描述多态性

如何以易于理解的方式描述多态性?

我们可以在 Internet 和书籍上找到很多关于该主题的信息,例如Type polymorphism。但是,让我们尽量让它变得简单。

0 投票
6 回答
3609 浏览

c++ - std::for_each 中的多态函子

我正在尝试使用 stl 算法 for_each 而不会在我的代码中增加模板。std::for_each 想要按值实例化 MyFunctor 类,但它不能因为它的抽象。我创建了一个仿函数适配器类,它传递一个指针,然后在适当的时候取消引用它。

我的问题:

STL 或 Boost 是否已经有这样的适配器类?我不想重新发明轮子!

干杯,

戴夫

0 投票
12 回答
13494 浏览

c++ - 多态性或条件会促进更好的设计吗?

我最近在谷歌测试博客中偶然发现了这篇关于编写更多可测试代码的指南。直到这一点,我都同意作者:

支持多态而不是条件:如果你看到一个 switch 语句,你应该考虑多态。如果您在课堂上的许多地方看到相同的 if 条件重复,您应该再次考虑多态性。多态性会将你的复杂类分解成几个更小的更简单的类,它们清楚地定义了哪些代码片段是相关的并一起执行。这有助于测试,因为更简单/更小的类更容易测试。

我根本无法解决这个问题。我可以理解使用多态性而不是 RTTI(或 DIY-RTTI,视情况而定),但这似乎是一个如此广泛的陈述,我无法想象它实际上被有效地用于生产代码。在我看来,更容易为具有 switch 语句的方法添加额外的测试用例,而不是将代码分解成几十个单独的类。

此外,我的印象是多态性会导致各种其他微妙的错误和设计问题,所以我很想知道这里的权衡是否值得。有人可以向我解释这个测试指南的确切含义吗?

0 投票
11 回答
46004 浏览

python - python属性和继承

我有一个带有属性的基类(get 方法),我想在子类中覆盖该属性。我的第一个想法是这样的:

这不起作用(子类 bar.age 返回 11)。我找到了一个有效的 lambda 表达式解决方案:

那么这是使用属性并在子类中覆盖它们的正确解决方案,还是有其他首选方法可以做到这一点?

0 投票
2 回答
1249 浏览

java - JAX-RPC Web 服务中的多态性

我有一个需要返回复杂多态值的 JAX-RPC (Java) Web 服务。更具体地说,类结构是这样的:

我的网络服务有一个返回测验的方法,它当然可能包含问题和部分,其中可能包含问题和其他部分,依此类推。但是,当我生成 WSDL 时,只有 Child 和 Quiz 进入。当我调用 Web 服务时,我得到一个带有正确数量子元素的 Quiz 元素,但它们都是 Child 元素,并且它们都是空的.

除了将 XML 作为字符串返回之外,有没有一种很好的方法来完成这项工作?

在有人问之前,由于我无法控制的情况,我不能使用 JAX-WS。