带有一些实现的 c++ 抽象类

Posted

技术标签:

【中文标题】带有一些实现的 c++ 抽象类【英文标题】:c++ abstract class with some implementation 【发布时间】:2012-01-10 07:53:10 【问题描述】:

我想用一个单一的但有一些默认实现的 C++ 中的抽象类。 这样每个继承它的类都将具有默认行为,但您不能创建基类的实例。 但如果我将 foo 标记为纯虚拟,我就无法为其添加实现。

class Base

public:
    virtual void foo() =0; //Now I can't add foo implementation
;

我的解决方案是不要将其作为纯虚拟,而只是隐藏构造函数。 我想知道是否可以将类标记为纯类,但仍有一些实现?

【问题讨论】:

“我的解决方案是不将其作为纯虚拟,而只是隐藏构造函数”到底有什么问题?这听起来很合理。 提供纯虚函数的实现是没有问题的。但我同意詹姆斯的观点,你最初的想法可能是最好的。 使用私有构造函数可能是要走的路。或者,如果您有 C++11 编译器,则可以将构造函数标记为 deleted。 @JoachimPileborg:您需要对其进行保护(而不是删除)才能实例化派生类。 【参考方案1】:

你can add an implementation to a pure virtual function。派生的类可以通过显式调用基类方法来使用默认实现。

【讨论】:

以上是关于带有一些实现的 c++ 抽象类的主要内容,如果未能解决你的问题,请参考以下文章

带有抽象类的 Python ctypes

C++面向对象:C++ 接口(抽象类)

C++ 抽象类 (abstract class)

为啥编译器认为这个类是抽象的(C++)?

接受对抽象类的 const 引用的 C++ 构造函数无法初始化 std::map

C++ 撤消/重做实现中的抽象类问题