问题标签 [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.
c++ - “类形状”没有名为“信息”的成员,但添加一个也不起作用
我正在尝试编译一些代码(此代码)但是当我注释掉第 25 行时:
virtual void info()=0;
它无法编译:
但是保留第 25 行会给纯虚函数带来很长的错误...
等等...
谁能告诉我我做错了什么?谢谢。
python - 在 Real 和 Rational 之间添加数字类型,并支持有理数的类型功能
Python 为数字类型提供了一组抽象基类。这些以 开头Number
,其中Complex
是一个子类,依此类推,一直到Real
,Rational
和Integral
。由于每个都是最后一个的子类,因此每个都支持序列中在它之前的类的特殊功能。例如,您可以编写(1).numerator
以获取 Python integer 的分子,该分子是1
使用整数文字创建的1
,被视为有理数。
链接页面说明:当然,数字可能有更多的 ABC,如果排除了添加这些的可能性,这将是一个糟糕的层次结构。您可以在 Complex 和 Real 之间添加 MyFoo:
这具有添加复数的新子类的效果,这样类型的对象Real
将作为新类的实例进行测试 - 因此在“中间”Complex
和Real
某种意义上添加了新类。然而,这并没有解决新类可能引入numerator
其子类未提供的功能(例如由属性举例说明的功能)的可能性。
例如,假设您要添加一个类,其实例表示形式为a + b√2
wherea
和b
是有理数的数字。您可能会在内部将这些数字表示为一对Fraction
s(fraction.Fraction
来自 Python 标准库的实例)。显然,这类数是 的子类Real
,我们希望将Rational
其视为它的子类(因为每个有理数都是我们的新类型的数b == 0
)。所以我们会这样做:
我们可能希望向新类添加属性(比如)返回数字a
和b
. 这些属性可能被称为RationalPart
和CoefficientOfRoot2
。然而,这很尴尬,因为现有的类型数量Rational
将不具有这些属性。如果我们写(1).RationalPart
,那么我们将得到一个AttributeError
. 示范:
因此,我们并没有真正引入一个新的类型,它“介于”现有的两个类型之间,因为子类关系的“底部”类型不支持“中间”类的行为。
解决这个问题的普遍接受的方法是什么?一种可能性是提供一个函数(不是任何类的方法),它可以处理任何类型的输入并智能地行动;像这样的东西:
还有比这更好的方法吗?
c++ - 指向基类的指针在 while 循环中丢失,导致段错误。C++
此代码使用 while 循环来获取用户输入并执行适当的命令 - 为了简洁起见,我将其减少为 2 个命令。
正确创建了 Oblock 对象(命令“O”),以及指向基类的指针。看来对这两个对象的调用也可以正常工作。但是,在返回 while 循环后,指向对象的指针似乎丢失了,并且尝试访问其成员(命令“t”)会导致段错误。我已经包含了下面的示例代码 - 我的问题是之后。
- 对象是否在退出 if 语句时解构?
- 是否有更好的方法来重复获取用户输入?
提前感谢您的任何建议!我搜索了与此类似的问题,但找不到适合我需要的问题。
python - 基于抽象基类捕获异常
假设我有一个带有抽象基类的异常类,如下所示:
看来我可以赶上ProperSubclass
,MyExceptions
但不是ValueError
:
所以我的问题是,我应该能够通过它们的抽象基类捕获内置异常吗?如果是这样,怎么做?如果没有,规则是什么?
我想问这个问题的另一种方式是:除了子句是否正确使用 isinstance()/issubclass() 进行匹配,如果没有(似乎是这种情况)它们使用什么?也许在 C 实现中有一些阴暗的捷径。
python - 能够实例化 python 类,尽管它是抽象的(使用 abc)
这是参考“使用python的abc模块创建抽象类”这个问题的答案。(通过@alexvassel 并被接受为答案)。
我尝试了这些建议,但奇怪的是,尽管遵循了使用该abc
方式的建议,但它对我不起作用。因此,我将其作为问题发布在这里:
这是我的 Python 代码:
当我执行这个模块时,这是我控制台上的输出:
与接受的答案相反
那么我在做什么是对还是错?为什么工作而不失败?感谢任何专家对此的见解。
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.
python - Python 抽象基类可以强制执行函数签名吗?
假设我定义了一个这样的抽象基类:
这确保任何派生自的类都Quacker
必须实现该quack
方法。但是,如果我定义以下内容:
我被允许实例化类,因为我提供了quack
方法,但函数签名不匹配。我可以看到这在某些情况下可能很有用,但我有兴趣确保我绝对可以调用抽象方法。如果函数签名不同,这可能会失败!
那么:如何强制执行匹配的函数签名?如果签名不匹配,我会在创建对象时出现错误,就像我根本没有定义它一样。
我知道这不是惯用的,如果我想要这些保证, Python 是错误的语言,但这不是重点——有可能吗?
c# - C# Xml-将抽象基类型序列化为派生类型 - 哪个 TypeName 属性定义获胜?
我的场景:
我有一个对象,我定义了一个用 XmlElement 标记修饰的属性,并且具有我定义的类型,其中一些类型是抽象的,可以设置为相应的派生类型。我想使用 XmlSerializer 将整个对象序列化为 XML,并且所有抽象的属性都应该序列化为 TypeName 设置为派生类型的 TypeName 的元素。
这是对象结构的示例:
但是请注意,当我创建 MainObject 的新实例、填充它的属性并对其进行序列化时,生成的 XML 如下所示:
我想要的是这样的:
任何线索我在这里做错了什么?
c++ - 抽象类中的纯虚函数,返回类型为基/派生类型
我希望使基类的每个派生类都实现一个函数(在本例中为后缀运算符),该函数具有派生类的类型作为返回类型,如下所示:
这会产生这种错误return type 'A' is an abstract class
。该怎么办?据我了解,后缀必须返回实际类型,而不是类型的引用/指针。