Это простой вопрос (я думаю). Я просто не уверен, что об этом и я ищу хорошее решение тоже :)C++: приоритет наследования
Скажем, у меня есть это:
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)
.
Я хотел бы знать, есть ли способ получить его так, как я хочу.
Спасибо :)
UPDATE
Я редактировал это, потому что у меня было несколько опечаток. Я не копировал-вставлял код, потому что он довольно сложный, чем я хочу. < Надеюсь, этого достаточно.
Показать код, который компилируется. 'A objA = new A();' инициализирует объект с указателем. Ваша ошибка, вероятно, заключается в тонком неправильном использовании ссылок или бросков (или другой проблеме типа), поэтому нам нужен * точный * код для его воспроизведения. – Angew
вы забыли 'virtual' в определении' connect (A & a) ' – Thomas
Thsi не будет компилировать' A objA = new A() '. Все компиляторы, которые я использовал, отказываются компилировать эту строку. Как вы получили свою продукцию? – DumbCoder