如何在程序中動態地初始化對象而無需在C++中繼承? 例如,我有A類和B類。取決於我需要創建對象實例的條件,但我不確切知道需要創建哪個對象,這取決於用戶輸入的信息;如何在程序中動態初始化對象?
示例代碼:
int i;
cin>>i>>endl;
void *obj;
if(i)
obj = new A();
else
obj = new B();
如何在程序中動態地初始化對象而無需在C++中繼承? 例如,我有A類和B類。取決於我需要創建對象實例的條件,但我不確切知道需要創建哪個對象,這取決於用戶輸入的信息;如何在程序中動態初始化對象?
示例代碼:
int i;
cin>>i>>endl;
void *obj;
if(i)
obj = new A();
else
obj = new B();
根據您的需要,您可以使用std::any或std::variant。
將指針投射到void*
(大部分時間)是一個壞主意,因爲您鬆開了對象的類型,並且必須處理原始指針。這意味着你必須管理資源,調用正確的析構函數... any
和variant
爲你做。
我會建議使用variant
,而不是any
,除非你有any
特定的需要,因爲variant
讓您欣賞到更多類型的控制:你的價值只能有類型的有限列表。
如果你沒有服用指針然後根據需要輸入兩個類的兩個指針並初始化一個限制。
int i;
A *a_ptr;
B *b_ptr;
cin>>i>>endl;
if(i)
a_ptr = new A();
else
b_ptr = new B();
我知道,但我可以只創建一個指針並初始化我需要的對象? – icegas
你會用那個指針做什麼? –
的可能的複製[鑄造類指針指向void(https://stackoverflow.com/questions/18929225/casting-class-pointer-to-void-pointer) – Tryum
爲什麼你想避免繼承?如果你需要能夠將兩個類中的任何一個存儲在一個變量中,那麼類必須有一些共同點。如果他們有共同點,那麼繼承是自然的解決方案。 –
它只有一種方式?但如果我有矩陣和類的向量類?你認爲這是不錯的選擇首先創建抽象類嗎? – icegas