簡體   English   中英

通過基本 class 指針獲取派生 class object 的引用

[英]Get a reference of a derived class object through a base class pointer

我有一個基本 class 指針向量來存儲不同的派生類。 我需要訪問可能存在於派生 class 上的方法/對象,而不是基礎 class 上的方法/對象。

我嘗試使用類似base* getObject(int idx); 然后使用dynamic_caststatic_castBase*Derived& ,但這似乎不起作用,因為編譯失敗。

我的基礎 class 看起來像這樣:

        class Base {
          int a, b;
        public:
          virtual void f1(int) = 0;
          virtual void f2(int, int) = 0;
        };

我的派生類看起來像這樣:

        class Derived : public Base {
          std::vector <int> myVector;
        public:
          void f1(int ai) override {}
          void f2(int ai, int bi) override {}
          int getFromVector(int idx) { return myVector[idx]; }
        }

應該包含派生類的向量如下所示:

        std::vector <Base*> derivedObjects;

我想做的是從derivedObjects向量中獲取一些東西,然后訪問getFromVector()

我同意 Igor Tandetnik 的觀點,接口 class 可能需要設計得更好。 使用給定的語句,可以使用 dynamic_cast,但您必須記住,動態轉換是一次嘗試,它可能會失敗。 由於您在強制轉換操作失敗的情況下使用派生 class 的引用,因此您必須捕獲異常並相應地繼續。

例如,如果您有 Derived1 和 Derived2 類,並且您嘗試將 Derived1 object 動態轉換為 Derived2 引用,則將引發 bad_cast 異常。 這是因為參考 object 不能設置為 null。 作為替代方案,您可以嘗試將其強制轉換為派生類型的指針而不是引用。 嘗試動態轉換后,您可以檢查指針是否為 null。

進一步參考: http://www.cplusplus.com/doc/tutorial/typecasting/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM