如何正确扩展接口?

kra*_*mir 5 c++

我有基于另一个的接口:

class IDrawable {
public:
   virtual ~IDrawable();
};

class IExtendedDrawable: public IDrawable {
public:
   virtual ~IExtendedDrawable();
};

class DrawableImplementation: public IDrawable {
public:
   virtual ~DrawableImplementation();
};

class ExtendedDrawableImplementation: 
   public DrawableImplementation, public IExtendedDrawable
{
public:
   virtual ~ExtendedDrawableImplementation();
};
Run Code Online (Sandbox Code Playgroud)

然后ExtendedDrawableImplementation= DrawableImplementation (+IDrawable)+IExtendedDrawable (+IDrawable)

IDrawable在同一堂课上两次是正确的吗?

小智 5

我会怀疑您确实需要/想要多重继承。我认为它只在有限的情况下很好,接口就是其中之一(甚至 Java 也允许这样做)。

如上所述,使用虚继承,并且确保只virtual在接口classes 中使用纯方法。

class IDrawable {
public:
   virtual ~IDrawable();
   virtual void doSomething() = 0;
};

class IExtendedDrawable: virtual public IDrawable {
public:
   virtual ~IExtendedDrawable();
   virtual void doSomethingElse() = 0;
};

class DrawableImplementation: virtual public IDrawable {
public:
   virtual ~DrawableImplementation();
   virtual void doSomething() {/*code here*/}
};

class ExtendedDrawableImplementation: 
   public DrawableImplementation, public IExtendedDrawable
{
public:
   virtual ~ExtendedDrawableImplementation();
   virtual void doSomething() {/*code here*/}
   virtual void doSomethingElse() {/*code here*/}
};
Run Code Online (Sandbox Code Playgroud)