Tag: 多态性

关于多态性,引用和指针是否相等?

我一直认为必须使用多态指针。 使用规范的例子: DrawEngine::render(Shape *shape) { shape->draw(); shape->visible(true); } 并传递指向各种Shape派生类的指针。 它是否与参考一样工作? DrawEngine::render(Shape &shape) { shape.draw(); shape.visible(true); } 是否有效: engine.render(myTriangle); // myTriangle instance of class derived from Shape 如果这样做,这两个案件有什么分别吗? 我试图在Stroustrup中find信息,但是我什么也没find。 我重新开放了这个,因为我想多探索一下。 所以至less有一个区别是dynamic_cast。 对我来说,多态包括使用dynamic_cast。 我可以去吗 Rhomboid & r = dynamic_cast<Rhomboid &>(shape); 如果演员失败会发生什么? 这有什么不同吗? Rhomboid * r = dynamic_cast<Rhomboid*>(&shape);

在OCaml中Haskell的types类最接近什么?

有什么方法可以完成Haskell的类类在OCaml中的工作? 基本上,我想写一个多态的函数,而不写太多的代码。 做多态的典型方法是提供一个额外的参数,告诉函数是目前正在处理的types。 例如,假设我想对整数列表进行sorting,我必须将一个额外的比较器传递给该函数。 type comparison = Lesser | Equal | Greater my_sort : (a' -> a' -> comparison) -> 'a list -> 'a list 无论如何告诉OCaml,我的types是可比较的,而不用为每种我想要分类的types编写比较器函数? 这意味着我的sortingfunction看起来就像这样: my_sort : 'a list -> 'a list

设置一个多态has_many:through关系

rails g model Article name:string rails g model Category name:string rails g model Tag name:string taggable_id:integer taggable_type:string category_id:integer 我已经创build了我的模型,如上面的代码所示。 文章将是可以有标签的许多模型之一。 类别模型将包含可能分配的所有类别。 标记模型将是一个多态的连接表,它代表标记的关系。 class Article < ActiveRecord::Base has_many :tags, :as => :taggable has_many :categories, :through => :taggable end class Category < ActiveRecord::Base has_many :tags, :as => :taggable has_many :articles, :through => :taggable end class Tag < […]

为什么使用id,当我们可以只使用NSObject?

我知道,当我们想创build一个未知的值对象,我们使用ID。 不过,我很好奇,为什么苹果select在运行时决定它的值的id,当时每个对象都是NSObject的子类。 所以,而不是id delegate我们可以使用NSObject *delegate有谁知道为什么? 谢谢。

如何在不扩展类的情况下实现dynamic多态

我在采访中被问及如何在不扩展类的情况下实现dynamic多态性。 如何才能做到这一点?

C ++ 11和缺乏多态lambdaexpression式 – 为什么?

我一直在审查C ++ 11标准的草案版本。 特别是关于lambda的章节,我对于不引入多态lambdaexpression式的理由感到困惑。 例如,在100001种方法中,可以使用多态lambdaexpression式,我希望我们可以使用如下的代码: template<typename Container> void foo(Container c) { for_each(c.begin(), c.end(), [](T& t) { ++t; }); } 原因是什么: 委员会是否耗尽了时间? 那个多态的lambdas太难实现了? 或者也许他们被视为PTB不需要? 注意:请记住上面的例子不是唯一的,它只是作为代码types的指南。 仅仅专注于为上述代码提供解决方法的答案将不被视为有效! 相关资料: 用于C ++的Lambdaexpression式和闭包 (文档编号N1968 = 06-0038) lambda函数可以模板化吗?

在函数式编程中实现多态

目前我正在享受从面向对象语言到function语言的转变。 这是一股清新的空气,我发现自己比以前更富有成效。 然而 – OOP的一个方面,我还没有看到FP方面令人满意的答案,那就是多态 。 即我有大量的数据项,当它们被传递到某些函数时需要以不同的方式处理。 为了论证,假设有多种因素推动多态行为,所以潜在地呈指数forms的许多不同的行为组合。 在OOP中,可以使用多态性相对较好地处理:通过组合+inheritance或基于原型的方法。 在FP我有点卡住之间: 编写或编写纯粹的函数,通过分支每个数据项的值有效地实现多态行为 – 感觉就像组装一个巨大的条件表,甚至模拟一个虚拟方法表! 把函数放在纯数据结构中,就像原型一样 – 这看起来像是起作用,但是这不违背定义与数据分开的纯函数的思想吗? 什么是这种情况推荐的function方法? 还有其他好的select吗?

删除工作指针基类?

你必须通过删除新的返回相同的指针,或者你可以传递一个指针到一个基types的指针? 例如: class Base { public: virtual ~Base(); … }; class IFoo { public: virtual ~IFoo() {} virtual void DoSomething() = 0; }; class Bar : public Base, public IFoo { public: virtual ~Bar(); void DoSomething(); … }; Bar * pBar = new Bar; IFoo * pFoo = pBar; delete pFoo; 当然这大大简化了。 我真正想要做的是创build一个充满boost :: shared_ptr的容器,并将其传递给一些代码,当它完成时将它从容器中删除。 […]

多态性或条件是否促进更好的devise?

我最近在googletesting博客中偶然发现了关于编写更多可testing代码的指导原则。 直到现在,我还是同意这位作者: 满足条件的多态性:如果你看到一个switch语句,你应该考虑多态性。 如果你看到相同的条件,在你class里的许多地方重复,你应该再次考虑多态性。 多态性将把你复杂的类分成几个更小的更简单的类,它们清楚地定义哪些代码片段是相关的并且一起执行。 这有助于testing,因为更简单/更小的类更容易testing。 我根本无法把头围住。 我可以理解使用多态而不是RTTI(或DIY-RTTI,视情况而定),但是这似乎是一个如此广泛的陈述,我无法想象它实际上在生产代码中被有效使用。 在我看来,为具有switch语句的方法添加额外的testing用例会比较容易,而不是将代码分解成几十个单独的类。 另外,我的印象是,多态性可能导致各种其他微妙的错误和devise问题,所以我很想知道这里的权衡是否值得。 有人可以向我解释这个testing指南是什么意思吗?

List <?>是List <Integer>和List <Number>的公共父项吗?

从这个Oracle教程中 , 虽然Integer是Number的子types,但List<Integer>不是List<Number>的子types,实际上这两个types是不相关的。 List<Number>和List<Integer>的公共父级是List<?> 。 我的问题是关于第二句话。 我们怎么能说List<?>是List<Number>和List<Integer>的公共父项? ? 代表未知types,可以是任何参考types。 即使我这样说? 在这里是Object , Object是Integer和Number的公共父项并不意味着List<Object>成为List<Integer>和List<Number>的公共父项。