【发布时间】:2012-09-16 13:54:00
【问题描述】:
我有一个项目,其中包含一些非常小的类,它们充当较大类的最小接口。有时我的对象需要其中的几个接口。有时这些接口共享相同的派生基类。无论如何,我可以构造我的代码,以便我只有一个所有接口共享的派生基类的副本?
这是一个代码示例:
class A {
public:
virtual void f(int a)=0;
virtual int g() const {
return m_inner;
}
protected:
int m_inner;
};
class B : public A {
public:
virtual void f(int a)=0;
virtual void h(int b) {
m_stuff = b;
m_inner = 0;
}
protected:
int m_stuff;
};
class C : public A {
public:
virtual void f(int a)=0;
virtual int i() const {
return m_otherstuff;
}
protected:
int m_otherstuff;
};
class D : public B, public C {
public:
void f(int a) { //do stuff }
//fill in the rest of a big actual class.
};
D 有 A 的两个副本,并且引用 A:: 是不明确的。构建课程的最佳方式是什么,以便我在一天结束时只获得一份 A 副本?我愿意以任何方式重组 A、B 和 C。这甚至可能吗?
【问题讨论】:
-
你有没有考虑让A成为一个虚拟基地?
-
在您的示例中,不清楚为什么 C 会从 A 派生。
-
我知道,这有点假。
标签: c++ class inheritance multiple-inheritance