我正在编写类似于此的界面:
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 ++中是否可行?
答案 0 :(得分:1)
使用虚拟继承,以避免成员重复:
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;
即使没有虚拟继承,也可以避免重复。 (为避免出现问题,我也会使用虚拟接口继承)
答案 1 :(得分:0)
多重继承是它的完美答案。
class Derived : public Base, virtual public DerivedInterface
{
public:
virtual void MethodB() {};
};
现在你有两个成员......