Questions tagged «polymorphism»

在计算机科学中,多态是一种编程语言功能,它允许以统一的方式处理不同数据类型的值。

1
什么是单态性限制?
我对haskell编译器有时会推断出比我期望的少多态的类型感到困惑,例如,在使用无点定义时。 似乎问题出在“单态限制”,在较早版本的编译器上默认启用。 考虑以下haskell程序: {-# LANGUAGE MonomorphismRestriction #-} import Data.List(sortBy) plus = (+) plus' x = (+ x) sort = sortBy compare main = do print $ plus' 1.0 2.0 print $ plus 1.0 2.0 print $ sort [3, 1, 2] 如果我使用它进行编译,则ghc不会得到错误,并且可执行文件的输出为: 3.0 3.0 [1,2,3] 如果我将main主体更改为: main = do print $ …

6
为什么在编译时不能解决运行时多态性?
考虑: #include<iostream> using namespace std; class Base { public: virtual void show() { cout<<" In Base \n"; } }; class Derived: public Base { public: void show() { cout<<"In Derived \n"; } }; int main(void) { Base *bp = new Derived; bp->show(); // RUN-TIME POLYMORPHISM return 0; } 为什么此代码会导致运行时多态,为什么在编译时无法解决?
73 c++  polymorphism 


9
多态性的好处[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 当我开始寻找多态性的好处时,我在这里发现了这个问题。但是在这里我找不到答案。让我告诉我想找到什么。这里有一些课程: class CoolingMachines{ public void startMachine(){ //No implementationion } public void stopMachine(){ //No implementationion } } class Refrigerator extends CoolingMachines{ public void startMachine(){ System.out.println("Refrigerator Starts"); } public void stopMachine(){ System.out.println("Refrigerator Stop"); } public void trip(){ System.out.println("Refrigerator Trip"); } } class AirConditioner extends CoolingMachines{ public void startMachine(){ System.out.println("AC Starts"); …

3
给定其字符串名称,如何实例化一个类?
我有一个抽象类,我想将其初始化为扩展它的类。 我有子类名称作为字符串。 除此之外... String childClassString; MyAbstractClass myObject; if (childClassString = "myExtenedObjectA") myObject = new ExtenedObjectA(); if (childClassString = "myExtenedObjectB") myObject = new ExtenedObjectB(); 我怎样才能做到这一点?基本上,我该如何摆脱if语句?

5
为什么此多态C#代码打印出它的功能?
最近,为我提供了以下代码,作为一种难题,以帮助理解OOP-C#中的多态性和继承。 // No compiling! public class A { public virtual string GetName() { return "A"; } } public class B:A { public override string GetName() { return "B"; } } public class C:B { public new string GetName() { return "C"; } } void Main() { A instance = new …

6
如果更少的编程(基本上没有条件)
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 2年前关闭。 改善这个问题 我有一个同事告诉我,他曾经在一家公司工作过,该公司的政策是永远在代码中没有条件(“ if”和“ switch”语句),并且他们让代码中的所有决定都使用多态性和(我猜)其他一些面向对象原则。 我有点理解这背后的原因,即拥有更干且更易于更新的代码,但我正在寻找对此概念的更深入的说明。也许这是更通用的设计方法的一部分。 如果有人对此有任何资源,或者愿意解释甚至有更多与此相关的术语,我可以使用它来寻找更多的答案,我将不得不这样做。 我在SO上发现了一个与之相关的问题,但是我不熟悉C ++,所以我对那里的答案不太了解。 (我不是OO大师,但我可以管理) 我最精通PHP,在Python之后,我更喜欢使用这些语言的信息。 更新:我将向我的同事询问有关他确切含义的更多信息。 2015年更新:经过多年的编程经验,我现在看到该策略的目的可能是防止程序员通过在某些地方仅添加条件(如果语句)来随意添加功能。扩展软件的更好方法是使用“打开/关闭原则”,其中通过使用继承和多态性来扩展软件。我强烈怀疑该政策是否在所有条件上都过于严格,因为如果没有这些条件,很难完全执行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.