-
饮歌长啸
把答案扩展到布氏,您可能希望通过添加虚拟析构函数来对接口的纯虚拟方法列表做一个例外。这允许您将指针所有权传递给另一方,而无需公开具体的派生类。析构函数不需要做任何事情,因为接口没有任何具体成员。将函数定义为虚拟函数和内联函数似乎有些矛盾,但请相信我-事实并非如此。class IDemo{
public:
virtual ~IDemo() {}
virtual void OverrideMe() = 0;};class Parent{
public:
virtual ~Parent();};class Child : public Parent, public IDemo{
public:
virtual void OverrideMe()
{
//do stuff
}};您不需要为虚拟析构函数包括一个主体-结果是一些编译器在优化一个空析构函数时遇到了问题,最好使用默认设置。
-
猛跑小猪
使用纯虚拟方法创建类。通过创建重写这些虚拟方法的另一个类来使用该接口。纯虚拟方法是定义为虚拟并分配给0的类方法。class IDemo{
public:
virtual ~IDemo() {}
virtual void OverrideMe() = 0;};class Child : public IDemo{
public:
virtual void OverrideMe()
{
//do stuff
}};
-
FFIVE
除了C#/中的抽象基类之外,还有一个特殊的接口类型类别。爪哇因为C#/Java不支持多重继承。C+支持多重继承,因此不需要特殊类型。没有非抽象(纯虚拟)方法的抽象基类在功能上等效于C#/Java接口。