gpt4 book ai didi

c++ - 我可以部分实现接口(interface)层次结构吗?

转载 作者:太空宇宙 更新时间:2023-11-04 11:43:08 25 4
gpt4 key购买 nike

我正在写一个类似这样的界面:

class BaseInterface
{
virtual void MethodA() = 0;
}

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

我想创建一个 Derived 类,它是一个 DerivedInterface(并且隐式地是一个 BaseInterface,尤其是一个 基地)。也就是说,我只想在类 Derived 中定义 MethodB - 我想部分指定接口(interface)(即 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(); }

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

没有派生接口(interface)可能更简洁:

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

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

关于c++ - 我可以部分实现接口(interface)层次结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20661049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com