【发布时间】:2012-11-16 13:04:18
【问题描述】:
我有一个类 Onote,它是 Qt 的扩展 QGraphicsItem。
我想创建另一个类Cmelody,其中包含属于该旋律的Onote 项目的列表以及所有这些音符共享的一些值,例如iTempo。
我希望从物理上相同 Cmelody 继承几个Onotes,因为它们都需要相互识别,我不能将这两个类都包含到这两个类中?似乎我需要虚拟继承,但有了它,每个Onote 都会有它自己的Cmelody。
是否可以创建一个系统,例如,Cmelody c1 将继承 Onote o1 和 Onote o2;而Cmelody c2 会继承Onote o3、Onote o4 和Onote o5?当我更改 Cmelody 中的一个值时,其所有 Onote 子级在从其 Cmelody 父级读取它时将获得相同的值。
为了演示,类结构大致如下:
class Cmelody
{
public:
Cmelody(void);
~Cmelody(void);
std::vector<Onote*> notes;
//a handful of variables and a function..
};
class Onote : public QGraphicsitem
{
public:
Onote(QObject* parent);
~Onote(void);
//various variables and some functions listed..
};
【问题讨论】:
-
如果您在对象实例之间共享数据,这不是继承。为此使用合成。
-
在处理 C++ 时,请小心使用“继承”一词。实际上,您不希望在
Onote和CMelody之间存在继承层次结构,因为Onote不是CMelody。 -
如果我使用作曲不会为每个音符创建一个新的旋律,这是我问题的前提吗?我应该使用什么“东西”,以便它可以监督与其关联的多个类?
-
@deprecated:如果你有很多音符,每个音符都需要引用包含它的旋律,那么每个音符都应该有一个指向该旋律的引用或指针。
-
@deprecated "inherit" 在 C++ 中指的是类之间的关系而不是它们的实例。
标签: c++ inheritance