无方法抽象类?

Pos*_*elf 3 c++

class Base
{
    virtual void bePolymorphic() = 0; // Will never be used
};

class Derived : Base
{
    virtual void bePolymorphic() override {}; // I have to do this in every derived class
};
Run Code Online (Sandbox Code Playgroud)

Base如果没有任何成员函数,这是我最近用来制作抽象类的hack .

在Java中有一个abstract关键字.为什么C++中没有?还有另一种方法可以使类抽象化吗?

das*_*ght 8

这个问题*的经典解决方法是使析构函数纯粹虚拟.当然,你必须在课外实现它:

// In the header file
class Base {
    virtual ~Base() = 0;
};
// In the source file
Base::~Base() {
}
Run Code Online (Sandbox Code Playgroud)

*这个建议来自Scott Meyers的一本书.

  • @ kim366这是违反直觉的,但是在1998年的第一个C++标准出现之前就已经允许了. (3认同)
  • @ kim366永远. (2认同)
  • 可惜`= default`不能与`= 0`一起使用以避免空的析构函数实现. (2认同)
  • @Malkocoglu主要区别在于,除非你把`= 0`,你的类的用户才能直接实例化它. (2认同)