0
我想有一個來自相同基類的類的對象的容器。看起來最好的方法是創建一個指向基類的指針容器,並將它們指向派生類對象。然而,我想要檢索的對象並把它傳遞到被重載派生類全局函數:(RESP A,B)有沒有辦法讓派生類的容器在檢索時被識別爲派生類而不是基類?
Class Base {};
Class A : public Base {};
Class B : public Base {};
double MyFunction(const A &a_object) {does things};
double MyFunction(const B &b_object) {does different things};
typedef boost::shared_ptr<Base> Ptr;
typedef std::vector<Ptr> PtrContainer;
int main()
{
PtrContainer MagicContainer;
//Fill MagicContainer with A's and B's
double result = MyFunction(*MagicContiner[0]); //Compiler can't resolve
//which MyFunction to use
}
我知道如果我提出的MyFunction基地虛擬成員函數這會工作,但我想保持全球MyFunction(或可能在一個單獨的類)。我對C++很陌生,因此非常感謝任何幫助。
你可以把專門的行爲放在虛擬方法後面嗎?試圖將非方法函數耦合到這樣的類是不好的設計,並且會導致代碼維護性差。如果可以的話,你真的需要課堂中所有特定於類的行爲。 –