c++ - 显式声明抽象基类

标签 c++ abstract-class

有没有办法在 C++ 中显式地将基类声明为抽象类?

我知道我可以在类中创建一个纯虚函数,它将隐式地将类声明为抽象类。但是,我不想创建一个虚拟函数只是为了在派生类中定义。

我还可以将构造函数设置为 protected ,这将阻止对象的实例化,但这实际上并没有将类标记为抽象。

那么,有没有办法做到这一点呢? (我正在使用 C++11,如果这添加了一种方法来做到这一点,但我没有找到任何看起来正确的东西)

最佳答案

您可以使析构函数成为纯虚拟的。由于您始终需要析构函数,因此无需额外的心理成本:

struct Foo
{
    virtual ~Foo() = 0;
};

inline Foo::~Foo() { }

(您当然需要析构函数的实现,因此您必须提供一个外线。)

您仍然可以使析构函数 protected ,这是遵循“使非叶类抽象”规则的良好实践。

示例:

struct Bar : Foo  { };

// Foo f;  // Error, Foo is abstract
Bar b;     // OK

关于c++ - 显式声明抽象基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13372121/

相关文章:

java - 从实际类中具有相同名称的抽象类中的另一个方法调用方法

c++ - 升级到 Qt 5 后的错误

c# - 如何将抽象类作为类型实例的参数传递?

c# - 在 C# 中执行此通用抽象类的最佳方法?

c++ - 使用引用与指针将数组作为参数传递

c++ - 如何使用 C 风格在 C++ 中正确深度复制抽象类数组的二维数组

Java代码 "NumberFormat nf = NumberFormat.getInstance();"

c++ - 我如何理解 C++ 中是否删除了指针

c++ - 如何正确使用 GMP 来执行此操作?

C++11 迭代器和返回的 std::unique_ptr 的范围