问题标签 [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 投票
1 回答
451 浏览

c++ - “类形状”没有名为“信息”的成员,但添加一个也不起作用

我正在尝试编译一些代码(此代码)但是当我注释掉第 25 行时:
virtual void info()=0;
它无法编译:

但是保留第 25 行会给纯虚函数带来很长的错误...

等等...

谁能告诉我我做错了什么?谢谢。

0 投票
1 回答
120 浏览

python - 在 Real 和 Rational 之间添加数字类型,并支持有理数的类型功能

Python 为数字类型提供了一组抽象基类。这些以 开头Number,其中Complex是一个子类,依此类推,一直到RealRationalIntegral。由于每个都是最后一个的子类,因此每个都支持序列中在它之前的类的特殊功能。例如,您可以编写(1).numerator以获取 Python integer 的分子,该分子是1使用整数文字创建的1,被视为有理数。

链接页面说明:当然,数字可能有更多的 ABC,如果排除了添加这些的可能性,这将是一个糟糕的层次结构。您可以在 Complex 和 Real 之间添加 MyFoo:

这具有添加复数的新子类的效果,这样类型的对象Real将作为新类的实例进行测试 - 因此在“中间”ComplexReal某种意义上添加了新类。然而,这并没有解决新类可能引入numerator其子类未提供的功能(例如由属性举例说明的功能)的可能性。

例如,假设您要添加一个类,其实例表示形式为a + b√2whereab是有理数的数字。您可能会在内部将这些数字表示为一对Fractions(fraction.Fraction来自 Python 标准库的实例)。显然,这类数是 的子类Real,我们希望将Rational其视为它的子类(因为每个有理数都是我们的新类型的数b == 0)。所以我们会这样做:

我们可能希望向新类添加属性(比如)返回数字ab. 这些属性可能被称为RationalPartCoefficientOfRoot2。然而,这很尴尬,因为现有的类型数量Rational将不具有这些属性。如果我们写(1).RationalPart,那么我们将得到一个AttributeError. 示范:

因此,我们并没有真正引入一个新的类型,它“介于”现有的两个类型之间,因为子类关系的“底部”类型不支持“中间”类的行为。

解决这个问题的普遍接受的方法是什么?一种可能性是提供一个函数(不是任何类的方法),它可以处理任何类型的输入并智能地行动;像这样的东西:

还有比这更好的方法吗?

0 投票
4 回答
568 浏览

c++ - 指向基类的指针在 while 循环中丢失,导致段错误。C++

此代码使用 while 循环来获取用户输入并执行适当的命令 - 为了简洁起见,我将其减少为 2 个命令。
正确创建了 Oblock 对象(命令“O”),以及指向基类的指针。看来对这两个对象的调用也可以正常工作。但是,在返回 while 循环后,指向对象的指针似乎丢失了,并且尝试访问其成员(命令“t”)会导致段错误。我已经包含了下面的示例代码 - 我的问题是之后。

  • 对象是否在退出 if 语句时解构?
  • 是否有更好的方法来重复获取用户输入?

提前感谢您的任何建议!我搜索了与此类似的问题,但找不到适合我需要的问题。

0 投票
1 回答
4683 浏览

python - 基于抽象基类捕获异常

假设我有一个带有抽象基类的异常类,如下所示:

看来我可以赶上ProperSubclassMyExceptions但不是ValueError

所以我的问题是,我应该能够通过它们的抽象基类捕获内置异常吗?如果是这样,怎么做?如果没有,规则是什么?

我想问这个问题的另一种方式是:除了子句是否正确使用 isinstance()/issubclass() 进行匹配,如果没有(似乎是这种情况)它们使用什么也许在 C 实现中有一些阴暗的捷径。

0 投票
2 回答
1898 浏览

python - 能够实例化 python 类,尽管它是抽象的(使用 abc)

这是参考“使用python的abc模块创建抽象类”这个问题的答案。(通过@alexvassel 并被接受为答案)。

我尝试了这些建议,但奇怪的是,尽管遵循了使用该abc方式的建议,但它对我不起作用。因此,我将其作为问题发布在这里:

这是我的 Python 代码:

当我执行这个模块时,这是我控制台上的输出:

与接受的答案相反

那么我在做什么是对还是错?为什么工作而不失败?感谢任何专家对此的见解。

0 投票
1 回答
830 浏览

c++ - STL map and pure virtual base class

I have not used C++ in a long time. I'm trying to display some polymorphic behavior:

#xA;

So In my main function, when I call:

#xA;

I would expect:

#xA;

Not sure if this is the right way to do this. When I compile the code, it gives me this error:

#xA;

Which refers to these lines:

#xA;

Thank you.

0 投票
2 回答
1106 浏览

c# - 单例的通用抽象基类 (C#) - 无法实例化私有 Lazy 实例

我目前有一个 6 或 7 个单例的集合,所有这些都做几乎相同的事情(参见For下面示例中的方法)但使用不同的内部数据库查询并返回不同对象的集合(因此解析数据库结果是不同的在每个单身人士中)。

因此,使用这个问题作为我的基础,我一直在尝试在 C# 中为这些单例构建一个抽象的通用基类。

关于 SO也有类似的问题Lazy,但没有实施,我希望这样做。

到目前为止我有这个

但是,上线出现问题

Visual Studio 告诉我“无法解析构造函数 'Lazy<T>'。”

我不确定应该将什么传递给构造函数Lazy<SingletonBase<T>>,还是我走错了方向?

0 投票
3 回答
9198 浏览

python - Python 抽象基类可以强制执行函数签名吗?

假设我定义了一个这样的抽象基类

这确保任何派生自的类都Quacker必须实现该quack方法。但是,如果我定义以下内容:

我被允许实例化类,因为我提供了quack方法,但函数签名不匹配。我可以看到这在某些情况下可能很有用,但我有兴趣确保我绝对可以调用抽象方法。如果函数签名不同,这可能会失败!

那么:如何强制执行匹配的函数签名?如果签名不匹配,我会在创建对象时出现错误,就像我根本没有定义它一样。

知道这不是惯用的,如果我想要这些保证, Python 是错误的语言,但这不是重点——有可能吗?

0 投票
3 回答
1442 浏览

c# - C# Xml-将抽象基类型序列化为派生类型 - 哪个 TypeName 属性定义获胜?

我的场景:

我有一个对象,我定义了一个用 XmlElement 标记修饰的属性,并且具有我定义的类型,其中一些类型是抽象的,可以设置为相应的派生类型。我想使用 XmlSerializer 将整个对象序列化为 XML,并且所有抽象的属性都应该序列化为 TypeName 设置为派生类型的 TypeName 的元素。

这是对象结构的示例:

但是请注意,当我创建 MainObject 的新实例、填充它的属性并对其进行序列化时,生成的 XML 如下所示:

我想要的是这样的:

任何线索我在这里做错了什么?

0 投票
1 回答
1818 浏览

c++ - 抽象类中的纯虚函数,返回类型为基/派生类型

我希望使基类的每个派生类都实现一个函数(在本例中为后缀运算符),该函数具有派生类的类型作为返回类型,如下所示:

这会产生这种错误return type 'A' is an abstract class。该怎么办?据我了解,后缀必须返回实际类型,而不是类型的引用/指针。