首頁 >後端開發 >C++ >為什麼我不能建立抽象類別的 `std::vector` ?

為什麼我不能建立抽象類別的 `std::vector` ?

Barbara Streisand
Barbara Streisand原創
2024-11-27 17:22:12225瀏覽

Why Can't I Create a `std::vector` of Abstract Classes?

理解 std::vector 的禁止

在物件導向程式設計中,抽象類別充當其他類別繼承的藍圖。然而,由於它們的不完整性質,它們不能直接實例化。此限制擴展到宣告抽象類別的std::vector,引發錯誤,指出「無法實例化抽象類別。」

抽象類別問題

抽象類別是用純虛函數宣告的函數,沒有實現。這意味著它們不是可以創建為物件的具體實體。相反,它們應該被繼承,並且它們的抽象函數在子類別中實現。

解決方法

要解決這個問題,有兩個主要的解決方法:

  1. 指向抽象類別的指標向量:
    而不是宣告一個抽象類別的std::vector ,您可以使用指向抽象類別的指標的std::vector 。這允許您在保留多態行為的同時儲存子類別的實例。

    std::vector<IFunnyInterface*> ifVec;
  2. 衍生類別向量:
    而不是使用抽象類,您可以可以建立衍生類,該衍生類別繼承抽象類別並提供其所有虛函數的具體實作。然後,您可以宣告該派生類別的 std::vector。

    class FunnyDerived : public IFunnyInterface
    {
        // Implement abstract function
    };
    
    std::vector<FunnyDerived> fdVec;

結論

雖然限制 std::vector 的創建似乎違反直覺抽象類別是物件導向程式設計的一個基本面向。透過使用指向抽象類別或衍生類別的指針,您可以在遵守抽象類別的限制的同時保持靈活性和多態性。

以上是為什麼我不能建立抽象類別的 `std::vector` ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn