C++ C+中是否始终存在纯虚拟方法+;?

C++ C+中是否始终存在纯虚拟方法+;?,c++,language-lawyer,abstract-class,virtual-functions,pure-virtual,C++,Language Lawyer,Abstract Class,Virtual Functions,Pure Virtual,我在一个工作项目中发现一些代码,当一个子类没有重写基类函数时会抛出错误(本质上,使用此实用程序的基类实际上是抽象的)。当我看到这一点时,我的第一反应是,“为什么他们不让这些方法成为纯虚拟的呢?”然而,所讨论的代码已经有15年的历史了,我不确定它是否是为了填补纯虚拟稍后会填补的空白而创建的(假设它当时不存在) 如果纯虚拟方法从那时起就已经存在,那么有什么理由为它们提供额外的或替代的功能吗?(我意识到这可能是主观的,但我甚至没有一个起点) 如果他们没有,是否有任何文档指出引入它们的标准 自第一个官

我在一个工作项目中发现一些代码,当一个子类没有重写基类函数时会抛出错误(本质上,使用此实用程序的基类实际上是抽象的)。当我看到这一点时,我的第一反应是,“为什么他们不让这些方法成为纯虚拟的呢?”然而,所讨论的代码已经有15年的历史了,我不确定它是否是为了填补纯虚拟稍后会填补的空白而创建的(假设它当时不存在)

  • 如果纯虚拟方法从那时起就已经存在,那么有什么理由为它们提供额外的或替代的功能吗?(我意识到这可能是主观的,但我甚至没有一个起点)

  • 如果他们没有,是否有任何文档指出引入它们的标准


自第一个官方C++98标准(可能更早)以来,纯虚拟函数一直存在

参考ISO/IEC 14882:1998[类别摘要]

如果一个类至少有一个纯虚函数,那么它就是抽象的

在Stroustrup的《C++的历史:1979》中做了更多的挖掘− 1991“(),他提到抽象类在1989年左右出现。说

“2.0发布前添加的最后一项功能是抽象类”


自第一个正式的C++98标准(可能更早)以来,纯虚拟函数就一直存在

参考ISO/IEC 14882:1998[类别摘要]

如果一个类至少有一个纯虚函数,那么它就是抽象的

在Stroustrup的《C++的历史:1979》中做了更多的挖掘− 1991“(),他提到抽象类在1989年左右出现。说

“2.0发布前添加的最后一项功能是抽象类”


它们已经存在于C++语言版本的第一个(不标准化)版本中。一些代码生成器生成这些异常,有时,您的实现可能不需要该方法,因为它从不调用实现的有限使用。一般来说,纯虚拟听起来像是一种方式,但是,我很确定如果您开始使用它,一些代码将无法编译。祝你好运!正如其他人指出的,纯虚拟从第1天起就一直在C++中。您能在基类中发布此代码的示例吗?这是编译时错误还是运行时错误?有一些深奥的原因可以解释为什么有些人想要做不同的事情,但是如果没有看到代码和错误,很难说。我的直接猜测是,当时仍有少数来自“C”阵营的酷客“听说”虚拟方法很慢。为了回答你的问题,也许你的同事习惯了用不同的语言编程,而这种语言不支持开箱即用的纯虚拟函数(Python<2.6)或者它以不同的方式支持它们(Java有
abstract
关键字)。或者他们不是好的C++程序员,他们现在没有这种可能性。然而,有可能这实际上是唯一的解决办法。在开始重构之前,请仔细检查。@乔治,你能详细说明这是如何相关的吗?它们已经从第一个(不标准化)版本的C++语言版本中存在。一些代码生成器生成这些异常,有时,您的实现可能不需要该方法,因为在实现的有限使用中从未调用过该方法。一般来说,纯虚拟听起来像是一种方式,但是,我很确定如果您开始使用它,一些代码将无法编译。祝你好运!正如其他人指出的,纯虚拟从第1天起就一直在C++中。您能在基类中发布此代码的示例吗?这是编译时错误还是运行时错误?有一些深奥的原因可以解释为什么有些人想要做不同的事情,但是如果没有看到代码和错误,很难说。我的直接猜测是,当时仍有少数来自“C”阵营的酷客“听说”虚拟方法很慢。为了回答你的问题,也许你的同事习惯了用不同的语言编程,而这种语言不支持开箱即用的纯虚拟函数(Python<2.6)或者它以不同的方式支持它们(Java有
abstract
关键字)。或者他们不是好的C++程序员,他们现在没有这种可能性。然而,有可能这实际上是唯一的解决办法。在开始重构之前,请仔细检查。@George您能详细说明一下这与此相关吗?