众所周知,某些语言具有接口(interface)的概念。这是Java:
public interface Testable {
void test();
}
如何在C++(或C++ 11)中以最紧凑的方式并且几乎没有代码噪音地实现这一目标?我非常感谢不需要单独定义的解决方案(只要 header 足够)。这是一种非常简单的方法,即使我也发现了 buggy ;-)
class Testable {
public:
virtual void test() = 0;
protected:
Testable();
Testable(const Testable& that);
Testable& operator= (const Testable& that);
virtual ~Testable();
}
这仅仅是个开始..而且我想要的已经更长了。如何改善呢?也许在std namespace 中的某个地方为此专门创建了一个基类?
最佳答案
关于什么:
class Testable
{
public:
virtual ~Testable() { }
virtual void test() = 0;
}
在C++中,这对子类的可复制性没有任何影响。这说明 child 必须实现
test
(这正是您想要的接口(interface))。您无法实例化此类,因此您不必担心任何隐式构造函数,因为它们永远都不能直接作为父接口(interface)类型调用。如果您希望强制子类实现析构函数,则也可以将其构造为纯析构函数(但仍必须在接口(interface)中实现它)。
还要注意,如果不需要多态销毁,则可以选择使析构函数受非虚拟保护。