我有基于另一个的接口:
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)