我可以部分实现接口层次结构吗



我正在编写一个类似于以下的接口:

class BaseInterface
{
virtual void MethodA() = 0;
}
class DerivedInterface : public BaseInterface
{
virtual void MethodB() = 0;
}

我想创建一个类Derived,它是一个DerivedInterface(并且,隐含地,它是BaseInterface,特别是Base)。也就是说,我只想定义MethodB,但在类Derived中,我想在其他地方部分指定接口(即MethodA)。

class Base : public BaseInterface
{
virtual void MethodA() {...};
}
class Derived : public DerivedInterface // somehow include Base as well
{
void MethodB() {...};
}

这在C++中可能吗?

使用虚拟继承,以避免成员重复:

class BaseInterface
{
public:
virtual void MethodA() = 0;
};
class DerivedInterface : virtual public BaseInterface
{
public:
virtual void MethodB() = 0;
};
class Base : virtual public BaseInterface
{
public:
virtual ~Base() {}
virtual void MethodA() {};
};
class Derived : public Base, virtual public DerivedInterface
{
public:
virtual void MethodB() {};
};
int main() {
Derived d;
d.MethodA();
d.MethodB();
}

如果没有虚拟继承,Derived有两个MethodA,并且需要在Derived中进行额外的重写:

virtual void MethodA() override { Base::MethodA(); }

不过,这会破坏界面设计!

没有派生接口可能更干净:

class FirstInterface;
class SecondInterface;
class Base : public virtual FirstInterface;
class Derived : public Base, virtual public SecondInterface;

这避免了重复,即使没有虚拟继承。(为了避免以后的麻烦,我也会使用虚拟接口继承)

多重继承是完美的答案。

class Derived : public Base, virtual public DerivedInterface
{
public:
virtual void MethodB() {};
};

现在你有两个成员。。。

最新更新