这可能是一个愚蠢的问题,但我从来没有看到有关它的问题或阅读它。
想象一下,我们有这个:
class Numeric
{
public:
virtual ~Numeric() {}
virtual int getNumeric() const = 0;
};
这被视为一个界面。
现在我插入一个枚举器(它可以是其他东西,比如typedef等)。
class Numeric
{
public:
enum Numbers
{
One,
Two,
};
virtual Numbers getNumeric() const = 0;
};
仍然是一个界面,或者它现在被认为是一个抽象类?
正如我所说,这可能很愚蠢,但我真的很想知道。
答案 0 :(得分:2)
如果您正在寻找正式答案,那么恐怕没有。
我在这里的C ++ 11标准草案只是说[10.4 class.abstract]:
抽象类也可用于定义其接口 派生类提供了各种实现。
“interface”一词的所有其他实例在整个~1300页PDF中仅涉及泛型编程或与OOP或抽象类无关的其他内容。< / p>
例如这里的这个[24.2.1 iterator.requirements.general]:
大多数库的数据运算模板 结构具有使用范围的接口。
这显然与抽象类无关。
Bjarne Stroustrup本人,如果你接受他的话作为“半官员”,在这方面也没有真正帮助你。引自glossary on his homepage:抽象类 - 仅定义接口的类;用作基础 类。
你将不得不忍受这样一个事实:C ++语言本身以及C ++开发人员和专家使用“interface”这个词作为的超集 “抽象类”。与...不同在Java中,接口是具有自己的interface
关键字的实际语言元素,在C ++中没有这样的东西。
其他一切都是基于意见的。
答案 1 :(得分:1)
您的第二课Numeric
是一个界面。
如果一个类有一个或多个纯虚函数,则该类称为“抽象类”。
通常,如果所有类的函数都是纯虚函数,那么这个类称为“接口”。
C ++没有明确的interface
概念,所以上面两个类被称为接口或抽象类,有点可互换。
答案 2 :(得分:0)
在我看来,你的第二堂课可以被视为一个界面。我认为没有一个标准可以定义C ++中的接口。但是,在具有接口的语言(例如Java)中,通常可以在接口内定义枚举。
我会考虑一个没有实现的类作为接口。