我有一个 Onote
类,它是 Qt 的扩展 QGraphicsItem
。
我想创建另一个类 Cmelody
,它包含属于该旋律的 Onote
项目列表以及所有这些音符共享的一些值,例如 iTempo
。
我希望从phyiscally same 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..
};
最佳答案
如果我理解你的问题,你只需要这个
class Onote; // <== Forward declaration of Onote
class Cmelody
{
public:
Cmelody(void);
~Cmelody(void);
std::vector<Onote*> notes;
//a handful of variables and a function..
};
class Onote : public QGraphicsitem
{
public:
Onote(Cmelody* parent) : parent_(parent) {} // <=== Save a pointer to Cmelody
~Onote(void);
//various variables and some functions listed..
private:
Cmelody* parent_;
};
int main ()
{
Cmelody melody;
melody.notes.push_back (new Onote (&melody));
melody.notes.push_back (new Onote (&melody));
melody.notes.push_back (new Onote (&melody));
melody.notes.push_back (new Onote (&melody));
}
关于c++ - 来自同一物理类的多重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13609147/