问题标签 [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 投票
5 回答
6971 浏览

polymorphism - 类 C 语言中的返回类型多态性

为什么我们看不到允许在返回类型中具有多态性的可调用对象的类 C 语言?我可以看到额外的类型推断将如何成为一个障碍,但我们有很多具有成熟类型推断系统的语言(适用于不同级别的“工作”)。

编辑:通过返回类型多态性,我的意思是仅在返回类型中重载函数签名。例如,C++ 和 Java 只允许在形式参数的类型中重载,而在返回类型中不允许重载。

0 投票
3 回答
461 浏览

linq - LinQ ORM 数据对象和继承

我正在考虑如何做到这一点,但我的数据库、文章、NewsItems 等中有几种不同形状的数据。

它们都有一些共同点,它们都有 ID(在数据库中它们被命名为 ArticleID、NewsID 等)

他们都有一个标题

他们都有BodyText

他们都有一个状态

他们都有一个DateAdded

我想做的是标准的类继承。

我想要一个名为Content的大师班(我不需要将其写入数据库),其字段如下:

  • ID
  • 标题
  • 字幕
  • 主体
  • 地位
  • 添加日期

我不确定如何使用 ORM 做到这一点。为什么我想要这个是因为我可以将一个内容列表传递给负责渲染它的 UserControl。它只需要所有对象共有的信息。

这甚至可能吗?

0 投票
1 回答
3431 浏览

ruby-on-rails - Rails 协会,habtm?多态?两个都?

在我的 Rails 应用程序中,我有三个模型,Projects、BlogPosts 和 Images。项目和博客帖子可以有许多链接图像,并且图像可以链接到项目、博客帖子或两者。

建立关联以使其在 Rails 中工作的最佳方式是什么?

0 投票
10 回答
4985 浏览

c++ - 带有参数的非纯虚函数是不好的做法吗?

我有一个带有可选虚函数的基类

当我编译这个时,我收到一个关于未使用的参数 x 的警告。还有其他一些我应该实现虚拟功能的方法吗?我已经像这样重写了它:

我还有一个问题,如果我不小心,我制作的子类可能会实现错误的功能,然后由于重载而我没有注意到:例如

之所以调用基类方法,是因为我使用“int y”参数实现了派生函数,但对此没有任何警告。这些只是 C++ 中的常见缺陷还是我误解了虚函数?

0 投票
4 回答
9532 浏览

php - 使用静态工厂模式时包含 PHP 库的最佳方式是什么?

我的 PHP 库中有几个静态工厂模式。但是,内存占用正在失控,我们希望减少执行期间所需的文件数量。这是我们今天所处位置的一个示例:

这是不可取的,因为需要包含 Car.php 和 Truck.php,即使可能只需要其中一个。据我所知, require/include 及其 ..._once 变体包括与调用范围相同的库。这是真的?

如果是这样,我相信这会导致内存泄漏:

在我看来,在第二个示例中,即使使用了 require_once 风格,对 Create() 的多次调用也会因为调用的范围而导致多次请求。

这是真的?在诸如此类的示例中,在 php 中动态包含库的最佳方法是什么?

谢谢!

0 投票
3 回答
458 浏览

c# - 通过继承改变返回签名——多态性

只是想知道是否有任何方法可以执行以下操作:

干杯安东尼

0 投票
12 回答
273108 浏览

java - 在 Java 中,如何从派生类中的覆盖方法调用基类的方法?

我有两个Java类:B,它扩展了另一个类A,如下:

我想调用A.myMethod()from B.myMethod()。我来自C++ 世界,我不知道如何用 Java 做这个基本的事情。

0 投票
4 回答
2986 浏览

map - OCaml 有通用的 map()/reduce() 函数吗?

在 Python 中,map() 适用于任何遵循序列协议的数据。无论我给它一个字符串还是一个列表甚至是一个元组,它都会做正确的事情^TM。

我不能在 OCaml 中也有我的蛋糕吗?我真的别无选择,只能查看我正在使用的集合类型并找到相应的 List.map 或 Array.map 或 Buffer.map 或 String.map?其中一些甚至不存在!我的要求是不是很不寻常?我肯定错过了什么。

0 投票
2 回答
27712 浏览

c++ - 删除是否适用于指向基类的指针?

您是否必须传递 delete 与 new 返回的相同的指针,或者您可以传递一个指向类基类型之一的指针?例如:

当然,这大大简化了。我真正想做的是创建一个充满 boost::shared_ptr 的容器,并将其传递给一些代码,该代码将在完成后将其从容器中删除。这段代码对 Bar 或 Base 的实现一无所知,并且将依赖 shared_ptr 析构函数中隐含的删除运算符来做正确的事情。

这可能行得通吗?我的直觉说不,因为指针不会有相同的地址。另一方面, dynamic_cast<Bar*> 应该可以工作,因此编译器在某个地方存储了足够的信息来解决这个问题。


感谢您的帮助,所有回答和评论的人。我已经知道虚拟析构函数的重要性,如我的示例所示;看到答案后,我想了一下,意识到虚拟析构函数的全部原因就是这种情况。因此它必须工作。我被缺少将指针转换回原始指针的可见方法而感到震惊。更多的思考让我相信有一种看不见的方法,我推测析构函数正在返回真正的删除指针以释放。当我在 ~Base 中看到这一行时,调查来自 Microsoft VC++ 的编译代码证实了我的怀疑:

跟踪汇编器发现这是传递给删除函数的指针。谜团已揭开。

我已经修复了将虚拟析构函数添加到 IFoo 的示例,这是一个简单的疏忽。再次感谢所有指出这一点的人。

0 投票
7 回答
16308 浏览

java - Java中的多态工厂/getInstance()

我的目标是创建一组对象,每个对象都有一个唯一标识符。如果具有该标识符的对象已经存在,我想使用现有对象。否则我想创建一个新的。我尽量不使用 Singleton 这个词,因为我知道这是一个肮脏的词......

我可以使用工厂方法:

或者同样,我可以有一个单独的 MyClassFactory 方法。

但我本来打算继承 MyClass:

如果我不再做,并调用 MySubClass.getInstance():

... 那么 subclassObj 将是一个普通的 MyClass,而不是 MySubClass。

然而,在每个子类中覆盖 getInstance() 似乎很老套。

我缺少一个简洁的解决方案吗?


这是问题的一般化版本。更具体,因为回答者要求他们。

该程序用于生成表示软件片段的节点之间的依赖关系的有向图。子类包括 Java 程序、Web 服务、存储 SQL 过程、消息驱动触发器等。

因此,该网络中的每个类“都是”元素,并且具有导航和修改与其他节点的依赖关系的方法。子类之间的区别在于populate()用于从适当的源设置对象的方法的实现。

假设名为“login.java”的节点得知它依赖于“checkpasswd.sqlpl”:

问题是 checkpasswd.sqlpl 对象此时可能已经存在,也可能不存在。