polymorphism相关内容

如何从 Rust 中的 File 或 stdin 进行多态 IO?

我正在尝试实现一个“多态"Input 枚举,它隐藏了我们是从文件读取还是从标准输入读取.更具体地说,我正在尝试构建一个具有 lines 方法的枚举,该方法将依次“委托"调用包装到 BufReader 中的 File 或 StdInLock (两者都有 lines() 方法). 这是枚举: 枚举输入{控制台(std::io::StdinLock),文件(std::io::Bu ..
发布时间:2022-01-24 16:34:56 其他开发

将派生类对象分配给父类引用

当我看到时我总是很困惑: 父 ref = new Child(); 子类扩展父类的地方. 对象 ref 在内存中的样子如何? 虚方法如何处理?非虚拟? 与以下有何不同: Child ref = new Child(); 解决方案 对象在内存中的外观如何? 您的问题不清楚.有两个相关的内存位置.变量与存储位置相关联.该存储位置包含对另一个存储位置的引用. 变量 ..
发布时间:2022-01-24 16:34:42 C#/.NET

Ruby on Rails 中的多态性和形式

我最近遇到了很多问题,但是感谢这个很棒的社区,我学到了很多东西. 我之前获得了多态关联所需的所有帮助,现在我有一个关于使用多态模型处理表单的问题.例如,我有 Phoneable 和 User,所以当我创建表单来注册用户时,我希望能够为用户分配一些电话号码(即:手机、工作、家庭). 类用户 :可通话结尾类电话 ..
发布时间:2022-01-24 16:34:32 其他开发

为什么虚函数需要通过指针而不是值(对象)传递?

我想我理解虚方法和 vtable 的概念,但我不明白为什么将对象作为指针(或引用)传递和按值传递(哪种废弃 vtable 或什么?) 为什么会有这样的工作: 材质* m = 新纹理;聚->setMaterial(m);//如果我一直携带指针,则调用 Texture 中的方法 不是这个?: 材质 m = Texture();聚->setMaterial(m);//如果我传递值,则调用 M ..

为什么 .net WCF 服务需要接口

与 asmx 实现不同,wcf 需要您实现它的接口.我不太明白这种设计背后的原因.接口是 2 个类之间的契约...话虽如此,您多久有 2 个 wcf 服务满足相同的接口但实现方式不同? 另一条评论,msdn强烈建议这样做: MyService 服务 = new MyService();尝试 {服务.DoWork();}捕捉(异常){}最后 {服务.关闭();} 假设我要使用这样的接口注 ..
发布时间:2022-01-24 16:33:47 C#/.NET

Java中的运行时多态性示例?

运行时多态与静态多态有何不同? 这可以是运行时多态的一个例子吗? 公共类 X{public void methodA()//基类方法{System.out.println("你好,我是X类的methodA");}}公共类 Y 扩展 X{public void methodA()//派生类方法{System.out.println("你好,我是 Y 类的方法 A");}}公开课 Z{公共静态 ..
发布时间:2022-01-24 16:33:29 Java开发

有没有理由在接口中隐藏继承的成员?

我了解从另一个类继承的类可能会通过使用 new 关键字来隐藏属性.然而,这隐藏了该属性的特定实现,所以我可以看到它是如何使用的. 在实现其他接口的接口中隐藏成员是否有任何实际理由?例如考虑下面的例子.IChildInterface 实现 IParentInterface,并隐藏 PropertyA. 接口IParentInterface{字符串名称 { 获取;放;}int Property ..
发布时间:2022-01-24 16:33:00 C#/.NET

为什么将未定义函数与未装箱类型一起使用时是多态的?

我刚读完论文Levity Polymorphism. 我有一个问题,为什么 undefined 在用作未装箱类型时可以是 levity-polymorphic. 首先,让我们从论文中对 boxity 的一些定义开始: 盒装: 装箱值由指向堆的指针表示. Int 和 Bool 是具有 boxed 值的类型示例. 拆箱: 未装箱值由值本身表示(不是指向堆的指针 ..
发布时间:2022-01-24 16:32:54 其他开发

C++ 函数重写

我有三个不同的基类: 类 BaseA{上市:虚拟 int foo() = 0;};类 BaseB{上市:虚拟 int foo() { 返回 42;}};BaseC 类{上市:int foo() { 返回 42;}}; 然后我像这样从基数派生(用 X 代替 A、B 或 C): class Child : public BaseX{上市:int foo() { 返回 42;}}; 三个不同基类 ..
发布时间:2022-01-24 16:32:39 C/C++开发

关于Java多态和强制转换的问题

我有一个 C 类.E 类扩展了它. E e = new E();C c = 新 C(); 为什么 e = (E) c; 经过进一步审查:尽管数字转换与强制转换对象具有相同的语法,但还是出现了一些混淆.无论如何,上面的代码并没有给出编译,而是运行时错误——因此在某些情况下可以将类转换为子类(否则代码将无法编译).任何人都可以举出上述方法的任何例子吗? 还有: K 扩展 MK k = ..
发布时间:2022-01-24 16:31:48 Java开发

覆盖与多态

两者有什么区别? 具有 myMethod(int a) 的超类和具有相同方法的继承类,这是覆盖还是多态? 我很清楚黑白覆盖和重载的区别,但多态性和覆盖似乎是一样的.还是他们? 解决方案 重写是当你在一个对象上调用一个方法,而子类中与超类中具有相同签名的方法被调用. 多态是指您在运行时不确定对象类型并调用最具体的方法.因此,调用的方法的行为可能会有所不同,具体取决于运行时的 ..
发布时间:2022-01-24 16:31:37 其他开发

如何在 MATLAB 中创建一组抽象类对象?

作为一个例子,假设我创建了一个名为 Shape 的抽象类和两个名为 Circle 和 Rectangle 的子类,它们都实现了一个 (abstract) 方法称为 Draw.我希望能够创建许多 Circle 和 Rectangle 对象,将它们存储在一个数组中,然后在每个数组对象上调用 Draw遍历数组. 我尝试过类似以下的方法: 形状.m: classdef (抽象) 形状 ..
发布时间:2022-01-24 16:31:31 其他开发

Java:使用多态性来避免 if 语句?

我正在尝试编写一个基于用户选择初始化某些布局的 java 程序.我想要做的是尽量避免编写一堆 if 语句,以便在需要添加更多布局时代码可以扩展以备将来使用.我听说实现这一点的最佳方法是使用多态,但我对多态的理解仍然有点模糊. 说我要实现这个案例: if (用户选择 layoutA) { 初始化 layoutA }if (用户选择 layoutB) { 初始化 layoutB }如果(用户选 ..
发布时间:2022-01-24 16:31:23 Java开发

Haskell 如何处理重载多态性?

我有一个关于 Haskell 多态性的问题. 据我所知,有两种类型的多态性: 参数:不指定输入类型. 例子: 函数名 :: [a] ->一个 重载:作为命令式编程,即将不同的参数传递给同一个函数. 我的问题是:Haskell 如何处理重载? 解决方案 Haskell 中的重载是使用类型类完成的.例如,假设您要重载一个返回 Int 的函数 foo: class ..
发布时间:2022-01-24 16:31:17 其他开发

Room 中的多态实体

我的 Room DB 中有 3 个实体: 相册、PhotosMediaItem和VideosMediaItem. VideosMediaItem 和 PhotosMediaItem 继承自 MediaItem. MediaItem 不是数据库中的实体,它只是一个抽象基类. 我想创建一个查询,以根据创建日期降序返回特定相册中的所有照片和视频媒体项. 因此查询将创建一个包 ..
发布时间:2022-01-24 16:31:10 移动开发

C++中的多态迭代器

我正在尝试在 C++ 中实现多态迭代器.基本上,我需要它才能应用过滤器,以便迭代器根据相关条件跳过一些项目.所以我做了一个带有摘要的 GoF-like 迭代器接口,这允许我从中派生过滤迭代器并实现所需的逻辑.我也更喜欢基于接口的迭代器而不是模板迭代器,因为它们允许隐藏实现而不会导致混乱的鸭子类型模板. 但是,多态迭代器不能按值返回(与 STL 迭代器相反),所以我必须传递指针,这很容易变得危 ..
发布时间:2022-01-24 16:31:04 C/C++开发

为什么定义纯虚函数有意义?

Scott 在《Effective C++, 3rd Edition, pg.》上说.43 要创建一个抽象类,我们只需要给它一个纯虚析构函数: class AWOV {//AWOV = "Abstract w/o Virtuals"上市:虚拟〜AWOV()= 0;//声明纯虚析构函数}; 然后,他继续说有一个转折:我们必须为纯虚析构函数提供一个定义: AWOV::~AWOW() {}//纯虚 ..
发布时间:2022-01-24 16:30:56 C/C++开发