polymorphism 相关问题

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

用于 xml 生成的 Golang 泛型

我必须生成一个XML,我当前的代码如下: 类型 ReportableSeller 结构 { 身份 身份 `xml:"身份"` } 类型身份结构{ 实体卖家 *EntityS...

回答 1 投票 0

这里x的值返回5,但是为什么呢? [重复]

为什么这里输出是5而不是15? 根据代码将x的值修改为15: A类{ 整数x = 5; 公共 int getX() { 返回这个.x; } 公共无效setX(在...

回答 4 投票 0

C++ 运算符重载和多态性

多态性和运算符重载会混合在一起吗? 没有指针就无法实现多态性,正如本答案中所解释的那样,并且您也无法使用指针进行运算符重载,如 expl...

回答 4 投票 0

我想重写子类中的私有内部类方法是否可能或有其他方法可以做到这一点?

有什么方法可以扩展外部类并重写该方法吗? A类{ 公共字符串 demofield; 私人课程演示类{ 公共演示方法(){ } } }

回答 1 投票 0

Kotlin 序列化子类:“未找到多态序列化器”

我正在尝试序列化子类的实例,但输出是意外的。 这是代码(第二个测试与第一个测试仅在 cc: ${c as Child} 处不同): 导入 kotlinx.serialization.Serializable

回答 1 投票 0

多态迭代器?

我正在使用 C++ 模板结构 Node 和存储指向这些 Node 对象的指针的复杂集合类 Collection。 Node结构定义如下: 模板 我正在使用 C++ 模板结构 Node 和存储指向这些 Node 对象的指针的复杂集合类 Collection。 Node结构定义如下: template <typename T> struct Node { T data; // Other methods and members }; 集合类是模板化的并保存Node指针: template <typename T> class Collection { Node* root; std::vector<Node*> query(Condition condition); ... }; 我还有一个函数 FoosConsumer 可以处理一系列 Foo 对象: template <typename FooRange> void FoosConsumer(FooRange &foos) { for(Foo &foo : foos) { // Do something with foo } } 当我需要查询我的集合以获取节点本身或仅获取这些节点的数据成员时,就会出现问题。理想情况下,我想直接迭代 collection.query(condition) 返回的节点的数据元素,然后将它们传递给 FoosConsumer。这就是我想要实现的目标: int main() { DataCollection<Foo> collection; // Can iterate over nodes for(auto &node : collection.query(condition)) { ... } // If I need to access `data` I do this: for(auto &node : collection.query(condition)) { Foo &data = node.data; } // My desire: Iterate over `data` of each node directly for(Foo &el : collection.query(condition)) { ... } // The intended use case is: FoosConsumer(collection.query(condition)); } 目前,我正在使用一种感觉低效且麻烦的解决方法: std::vector<Foo*> tmp; for(Node<Foo> &node : collection.query(condition)) { tmp.push_back(&node.data); } FoosConsumer(tmp); 是否有更优雅的方法来直接迭代我的集合中节点的数据成员?我正在寻找一种解决方案,允许对数据属性进行无缝迭代,而不需要中间容器或额外的循环。 我确实可以实现自定义迭代器或代理: for(Node &node : collection.queryNode(condition)) {} for(Data &node : collection.queryFoo(condition)) {} 但是,由于 Node* 和 Data* 共享相同的地址,并且对 Node 大小进行算术运算,我确信有一个技巧。 当我最后实现一个复杂的 tree 结构时,我最终做了类似的事情: namespace impl { enum node_dir {left=0,right=1}; struct node { node* parent; node* child[2]; const node* deep_child_to(node_dir dir) const; const node* next_child_to(node_dir dir) const; const node* parent_with_other_child_to(node_dir dir) const; const node* next_iter_in(node_dir dir) const; //etc. Most tree graph methods here, including mutating }; } 这阻止了每种模板类型生成相同的树维护代码。容器类本身最终变得微不足道,尽管需要一个尴尬的转换: template<class T> class container { struct node : impl::node { std::aligned_storage_t<sizeof(T), alignof(T)> buffer; //details... }; T& data(impl::node* n) {return static_cast<node>(n).buffer;} impl::node root = {}; public: T& first() {return data(root->deep_child_to(impl::left));} void push_back(T& v) {root->push_back(new node(v));} //etc. Almost every method was exactly one line. //note the class NEVER exposes `node` or `impl::node` publicly. } 模板类的方法每个都恰好是一行,这一事实有助于确认实例之间重复的代码最少。 迭代器的工作原理基本相同。他们有一个 node* 并调用 next_iter_in(dir),然后将其投射到 container<node> 以提取 data。有了这些原则,您的 query 方法同样可以在 impl::node 上运行,并且仅在用户边界处转换为 T。 另请注意,使用 node_dir 和 child[2] 允许我使用相同的 C++ 和二进制代码来镜像每个操作。

回答 1 投票 0

c++ 运算符重载和多态性

多态性和运算符重载会混合在一起吗? 没有指针就无法实现多态性,正如本答案中所解释的那样,并且您也无法使用指针进行运算符重载,如 expl...

回答 4 投票 0

Spring 和工厂方法

我想在工厂方法中实例化一个类,并执行接口中定义的方法的相应实现。 我的问题是我不想创建

回答 1 投票 0

员工继承、多态性和抽象类

我必须制作一个涉及6个班级的程序。 抽象 Employee 类-超类 薪水员工继承自 员工 HOurlyEmployee-继承自employee 委员会 员工继承自

回答 2 投票 0

使用继承和多态性编写Python程序

当然可以!让我们深入研究一个与面向对象编程和继承相关的详细Python问题: 问题:理解Python继承 考虑以下您所处的场景

回答 1 投票 0

什么是Python中的多态性? [已关闭]

详细介绍一下多态性 我们试图找到并解决与之相关的问题,但从我学习的地方或我完成 python 的平台来看,根据我的观点,它并不稳定

回答 1 投票 0

使 OCaml 函数对于 int 列表和 float 列表具有多态性

有没有办法在 OCaml 中创建一个对整数和浮点数同样有效的多态 add 函数?例如,如果我有一个类似的函数: 部分和 [1; 2; 3; 4; 5]我应该得到[1; 3;...

回答 4 投票 0

super().__init__() 调用顺序和子类属性

我正在用Python学习OOP,并且我正在继承类中训练多态性。 所以,我尝试了下面的代码: 类 MaquinaBebida(): def __init__(自身): # 一些 self.methods ...

回答 1 投票 0

JavaFX ObservableList<SuperClass>不保留子类属性

我有一个ObservableList,它保存子类对象。当我尝试访问特定于子类的属性时,尽管它们被传递到超类列表,但它们似乎丢失了。

回答 1 投票 0

C# - 扩展/添加接口到重写方法的参数

我对 C# 还很陌生。我试图派生一个类 UIObjectContainer : UIObject ,它重写方法 FillProperties ,该方法“填充”参数 Properties (仅保存杂项数据)。 我想...

回答 2 投票 0

C# - 扩展/添加接口到重写方法的参数

大家好,我是C#新手。我正在尝试派生一个类 UIObjectContainer : UIObject ,它重写方法 FillProperties ,该方法“填充”参数 Properties (仅保存杂项数据...

回答 1 投票 0

是否可以在 C# 的泛型方法中利用多态性?

字符串 Foo(字符串键,字符串默认值) { 返回查找(键); } bool Foo(字符串键, bool defaultValue) { 返回 bool.Parse(Lookup(key)); } T Bar(字符串键,T 默认值) ...

回答 1 投票 0

C++ 虚拟模板成员函数[重复]

#包括 类 Data_X { 民众: Data_X(int x): x(x) {} int getData() { 返回x; } 私人的: 整数x; }; 类父类{ 民众: 模板 T* 得到达...

回答 1 投票 0

unique_ptr 生成成员函数的模板特化

我正在尝试使用模板变量创建通讯类。 我的同事要求我使用 std::unique_ptr 进行内存管理。 但我认为我未能实现多态性。 我编写的代码如下。

回答 1 投票 0

调用存储在std::any中的对象的成员函数

假设我有一个模板类,如下所示: 模板 我的班级 { 民众: MyClass(std::string const& 名称){ s = 姓名; } T return_var1() {...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.