有没有办法在 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/