c++ - 来自同一物理类的多重继承

标签 c++ inheritance

我有一个 Onote 类,它是 Qt 的扩展 QGraphicsItem

我想创建另一个类 Cmelody,它包含属于该旋律的 Onote 项目列表以及所有这些音符共享的一些值,例如 iTempo

我希望从phyiscally same Cmelody 继承多个Onotes 因为它们都需要相互识别并且我不能包括两个类到两个类?似乎我需要虚拟继承,但有了它,每个 Onote 都会有它自己的 Cmelody

是否有可能创建一个系统,例如,Cmelody c1 将继承 Onote o1Onote o2;而 Cmelody c2 会继承 Onote o3Onote o4Onote 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/

相关文章:

c++ - 如何调用boost_compute 'BOOST_COMPUTE_FUNCTION'定义的函数?

python - 从 __init__() 调用重写方法是否安全?

c# - 将属性从基类向下移动到子类

c++ - 名称隐藏和脆弱的基础问题

C++ 弹道

c++ - const 常量操作是否在运行时评估?

c++ - 在控制结构 block 中定义变量

c++ - 这是否提供自动内存管理以及内存控制? shared_ptr<unique_ptr<数据>>?

java - 如何为一个方法定义多个实现?

c++ - Mixin 构造函数嵌套包扩展