具有接口类的多重继承是一种很好的设计实践吗?
它似乎工作,使运行gtest unittest套件方便.那么在下面的例子中,B类的多重继承是一个糟糕的设计实践吗?
#include <stdio.h>
class BInterface {
public:
virtual ~BInterface() {}
virtual void idb() = 0;
};
class A {
public:
A() {}
void ida() {printf("I am A\n");}
};
class B : public A, public BInterface { // ########### Is this OK? ############
public:
B() {}
void idb() {printf("I am B\n");}
};
int main() {
B BObject;
BInterface* BI = &BObject;
BI->idb();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:我只是继承接口类,但在这种情况下是多重继承是一种糟糕的设计,考虑到大多数代码专家建议不要使用多重继承.
从技术上讲,继承接口类是可以的.毕竟这就是他们的设计目标.它是否使设计水平感是另一回事,不考虑特定设计就无法做出决定.
在C++中,有一些优点可以实现接口继承virtual,特别是您可以在实现中继承,但它的效率也会略有降低.
Microsoft的COM是基于接口的体系结构的一个示例,它不使用virtual接口的继承.使用virtual将有复杂的1 COM类的C查看.但对于纯粹的C++内部代码,(希望)没有这样的考虑.
关于
"在下面的例子中,B类的多重继承是一个糟糕的设计实践?
...在示例中没有类B的多重继承,因为就像我写这个一样.
通常,多次继承接口类是可以的,但是您只想继承一次实现类.
1)通过不使用virtual继承或等效方案,COM对象可能具有多个类型的基类子对象IUnknown,这使对象标识的COM概念复杂化.本质上,它通过提供一个成员函数来解决,其中客户端代码可以请求指定接口的接口指针,其中IUnknown需要特殊处理,始终返回指向标识定义子对象的指针.类似的身份考虑可能适用于普通的C++接口继承.