C ++:继承优先级

时间:2014-01-29 15:06:00

标签: c++ function inheritance polymorphism derived-class

这是一个简单的问题(我认为)。我只是不确定它,我也在寻找一个好的解决方案:)

假设我有这个:

class Base {
  public:
    virtual ~Base() {}
    virtual Base& connect(Base &b) = 0;
}

class Derived: public Base {
  public: 
    virtual ~Derived() {}
    virtual Base& connect(Base &b)
    {
      // do_something
    }
}

// Name is a class that is basically a String and assign it to any A or B object.

class A: public Derived {
  public:
    A(name N) { ... }
    virtual ~A() {}
}

class B: public Derived {
  public: 
    B(name N) { ... }
    virtual ~B() {}
    A& connect(A &a)
    {
      // do something else
    }
}

int main(int argc, char *argv[])
{
  A objA("A");
  B objB("B");

  // Here's where is my issue
  objB.connect(objA);
}

当我致电objB.connect(objA)时,它实际上正在呼叫Base& connect(Base &b)。我理解,因为他们都是Base的孩子,并且connect()都定义了Derived。但问题是,只要我objB.connect(objA),我就会这样做,而应该拨打A& connect(A &a)

我想知道是否有办法按照我想要的方式使用它。

谢谢:)

更新

我编辑了这个,因为我有几个错别字。我没有复制粘贴代码,因为它比我希望的更复杂>。<希望这就够了。

1 个答案:

答案 0 :(得分:2)

您的代码无法编译。以下是编译和结果的代码:您可以根据指针类型选择要调用的connect版本:

class Base {
  public:
    virtual ~Base() {}
    virtual Base& connect(Base &b) = 0;
};

class Derived: public Base {
  public:
    virtual ~Derived() {}
    virtual Base& connect(Base &b)
    {
      qDebug() << "Baseconnect";
    }
};

class AA: public Derived {
  public:
    AA() {}
    virtual ~AA() {}
};

class BB: public Derived {
  public:
    BB() {}
    virtual ~BB() {}
    AA& connect(AA &a)
    {
        qDebug() << "Aconnect";
    }
};

示例:

int main(int argc, char *argv[])
{
    AA* aaptr = new AA;
    BB* bbptr = new BB;
    bbptr->connect(*aaptr);  // version from BB is called
    Derived* dptr = new BB;
    dptr->connect(*aaptr);   // version from Derived is called
    // ...
}

作为旁注,请始终确保您的代码编译和问题已明确定义。你缩小了对你的问题给出有用答案的机会。

相关问题