问题标签 [abstract-base-class]

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 投票
6 回答
4864 浏览

delphi - 抽象与接口 - 在 Delphi 中分离定义和实现

使用接口或抽象类分离定义和实现的更好方法是什么?

实际上,我不喜欢将引用计数对象与其他对象混合。我想这在维护大型项目时可能会成为一场噩梦。

但有时我需要从 2 个或更多类/接口派生一个类。

你的经验是什么?

0 投票
8 回答
8911 浏览

java - 抽象基类与作为超类型的具体类

在阅读了最优秀的书《Head First Design Patterns》之后,我开始向我的同事宣传模式和设计原则的好处。在赞美我最喜欢的模式——策略模式——的优点时,我被问到一个让我停顿的问题。当然,策略使用继承和组合,当一位同事问“为什么使用抽象基类而不是具体类?”时,我正在谈论“程序到接口(或超类型)而不是实现”的长篇大论.
我只能想出“好吧,你强制你的子类实现抽象方法并阻止它们实例化 ABC”。但老实说,这个问题让我措手不及。

0 投票
2 回答
2375 浏览

python - Python ABC:注册与子类化

(我使用的是 python 2.7)python 文档表明您可以将映射传递给 dict 内置函数,它将将该映射复制到新的 dict 中:

http://docs.python.org/library/stdtypes.html#mapping-types-dict

我有一个实现 Mapping ABC 的类,但它失败了:

但是,如果我的类是 collections.Mapping 的子类,那么它可以正常工作:

我认为 ABC 的全部意义在于允许注册与子类化一样工作(无论如何,对于 isinstance 和 issubclass)。那么这里有什么?

0 投票
3 回答
4088 浏览

python - 通知该子类的哪个异常应该实现一个方法?

假设我想在 Python 中创建一个抽象类,其中包含一些由子类实现的方法,例如:

我希望如果基类被实例化并且它的f()方法被调用,当self.g()被调用时,它会抛出一个异常,告诉你一个子类应该已经实现了 method g()

通常在这里做什么?我应该提出一个NotImplementedError?还是有更具体的方法?

0 投票
5 回答
593 浏览

c++ - STL 列表 - 作为指针对象的数据类型

我在使用继承和 STL 列表库时遇到问题...

比如说,我有一个带有两个派生类的抽象基类(其中定义了所有比较运算符)。该列表被声明为

我正在插入一个名为 Food 或 Clothing 的派生类(抽象基类 StoreItem)。我创建了一个即将插入的新 StoreItem 指针:

现在,我想将这个新项目(按顺序)插入到列表中,我的尝试是这样的:

有什么我做错了吗?另外,我将如何从库存中提取信息?(例如:使用复制构造函数的 Food tempFruit(**iter))。

先感谢您!祝你有美好的一天。

0 投票
3 回答
4554 浏览

c++ - C ++通过抽象基类在未知派生类上调用复制构造函数

我正在制作一棵具有几种不同节点类型的树:二元节点、一元节点和终端节点。我有一个所有节点都继承自的 ABC。我正在尝试为树编写一个递归复制构造函数,如下所示:

我的问题是我做不到

因为 gpnode 是一个虚拟类。我可以做

但是当 unode 的子节点是 bnode 时,这不起作用。如何让它智能地调用我需要的复制构造函数?

0 投票
1 回答
1009 浏览

asp.net - 将 Web 控件引用传递给用户控件基类

我创建了几个用户控件——大多数包含一个 Web 控件(文本框、下拉菜单、单选按钮等)——以及一个或多个验证控件。关键是将控制和验证结合在一个用户控件中。

我为这些用户控件创建了一个具有一些通用功能的基类 - 单个 Web 控件的多个属性的设置器,特别是要在 ascx 中的控件中设置的 CssClass 和 Style。
例如,带有单个必填字段验证器的单个文本框。

基类的示例代码:

派生类的示例代码:(在构造函数或控件 OnInit 事件中 - 或?)

ascx 的示例代码:

aspx 的示例代码:

我发现的问题是,在调用基类属性设置器之前,我找不到派生类设置基类 Web 控件引用的方法。如果我在派生类构造函数中设置 base.ctrl - 那么派生类控件引用(txt)此时仍然为空。如果我在任何控制事件中设置 base.ctrl - 例如 OnInit - 那么这为时已晚。

到目前为止,我已经解决了这个问题,只是不使用基类,而是在用户控件类中编写属性设置器代码,但这意味着代码重复,这是我试图避免的。

有没有办法通知控件的基类我希望它在设置属性之前设置它们 - 或者我是否以错误的方式处理事情......

0 投票
2 回答
2461 浏览

c++ - 如何初始化抽象基类的受保护成员?

也许我什么都不担心。我希望数据成员严格遵循 RAII 习语。如何将抽象基类中的受保护指针成员初始化为空?

我知道它应该为空,但确保它被普遍理解不是更好吗?

将初始化代码放在初始化列表之外有可能无法运行。考虑到将此指针分配到堆栈上的装配操作,它们不能在多线程环境中以几乎相同的方式(作为 c'tor 主体)被中断,或者堆栈扩展是否保证是原子的?如果保证析构函数运行,那么即使处理器没有原子地执行它,堆栈扩展是否也有这样的保证?

这么简单的问题怎么会变得如此广泛?谢谢。

如果我可以避免使用很棒的 std:: 库,那我就处于极简主义环境中。

0 投票
1 回答
930 浏览

entity-framework - 与一对多关系中的 FK 相关的错误

我正在使用 EF 5 Beta 2 Code-First。我创建了一个 edmx 文件,其中有 2 个实体,其中包括BrandVehicle

一个品牌可以有零个或多个(许多)车辆每辆车都应该有一个品牌(必需)。 Vehicle有一个名为BrandID的外键,它是不可为空的

我也确实使用EF 5 DbContext Generator来创建 POCO 类。

问题

当我尝试读取或写入记录时,我收到以下错误:

错误 3023:从第 155 行开始映射片段时出现问题:必须映射表 Vehicle 中的列 Vehicle.BrandID:它没有默认值且不可为空。

注意:我正在使用TPC继承映射,其中 Vehicle 是一个抽象基类,从中派生了 2 个类(CarMotorbike)。

这是类定义加上相关的流畅API代码:

这很奇怪,因为一切似乎都很好,并且已经检查了好几次。

任何想法将不胜感激。

0 投票
3 回答
3010 浏览

c++ - 由于多个抽象基类,实现两个具有相同名称但不同的非协变返回类型的函数

如果我有两个抽象类定义了一个具有相同名称但不同的非协变返回类型的纯虚函数,我如何从这些类派生并为它们的两个函数定义一个实现?

只要我不直接调用 C::test() 就没有任何歧义,所以我认为它应该以某种方式工作,我想我只是还没有找到正确的符号。或者这是不可能的,如果是这样:为什么?