在物件導向程式設計中,抽象類別充當其他類別繼承的藍圖。然而,由於它們的不完整性質,它們不能直接實例化。此限制擴展到宣告抽象類別的std::vector,引發錯誤,指出「無法實例化抽象類別。」
抽象類別是用純虛函數宣告的函數,沒有實現。這意味著它們不是可以創建為物件的具體實體。相反,它們應該被繼承,並且它們的抽象函數在子類別中實現。
要解決這個問題,有兩個主要的解決方法:
指向抽象類別的指標向量:
而不是宣告一個抽象類別的std::vector ,您可以使用指向抽象類別的指標的std::vector 。這允許您在保留多態行為的同時儲存子類別的實例。
std::vector<IFunnyInterface*> ifVec;
衍生類別向量:
而不是使用抽象類,您可以可以建立衍生類,該衍生類別繼承抽象類別並提供其所有虛函數的具體實作。然後,您可以宣告該派生類別的 std::vector。
class FunnyDerived : public IFunnyInterface { // Implement abstract function }; std::vector<FunnyDerived> fdVec;
雖然限制 std::vector 的創建似乎違反直覺抽象類別是物件導向程式設計的一個基本面向。透過使用指向抽象類別或衍生類別的指針,您可以在遵守抽象類別的限制的同時保持靈活性和多態性。
以上是為什麼我不能建立抽象類別的 `std::vector` ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!