有沒有辦法在容器中插入抽象類?編號
有沒有基類訪問派生類的方法?使用虛擬功能。
有沒有辦法讓這個示例代碼正常工作,並將控制檯樹皮?
有沒有辦法讓vector
容器保持實例而不是引用/指針?在運行時使用繼承代碼選擇器
在std::vector
裏面存儲指針只會在我使用引用計數器的情況下才是安全的,這是我最後的手段。我想念什麼?
class CAnimal
{
public:
virtual void soundsLike()
{
cout<<"Base function\n";
}
};
class CDog: public CAnimal
{
public:
void soundsLike()
{
cout<<"Woof\n";
}
};
class CZoo
{
public:
std::vector<CAnimal> animalList;
void addDog()
{
animalList.push_back(CDog());
}
};
控制檯輸出的基函數的消息:
int main(int argc, char* argv[])
{
CZoo nationalPark;
nationalPark.addDog();
nationalPark.animalList.front().soundsLike(); //Calls the base function.
return 0;
}
「是否有插入容器內的抽象類的方式編號?」 =>不是直接的,但你完全可以用指針。 – JBL
「有沒有辦法在容器中插入抽象類?No.」你爲什麼在第一句中提問,並在第二句中回答? xD – luk32
@JBL使用帶指針的容器會產生訪問衝突。 CDog的析構函數也被調用。 – William