这是一个简单的问题(我认为)。我只是不确定它,我也在寻找一个好的解决方案:)
假设我有这个:
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)
。
我想知道是否有办法按照我想要的方式使用它。
谢谢:)
更新
我编辑了这个,因为我有几个错别字。我没有复制粘贴代码,因为它比我希望的更复杂>。<希望这就够了。
答案 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
// ...
}
作为旁注,请始终确保您的代码编译和问题已明确定义。你缩小了对你的问题给出有用答案的机会。