[英]Access subclass methods from array of superclass in c++?
我有超稱為事務 ,它擁有一些方法:
那么稱為Order的子類具有以下方法:
因此,Order繼承自Transaction。
我的問題是可以有多種交易類型...訂單,付款等。
因此,我將數組中的每種交易類型保存為:
Transaction trans[100];
trans[0] = Order order(val,val,val);
trans[1] = Order order(val,val,val);
trans[2] = Order order(val,val,val);
...
但是現在當我調用trans[3].Get_item();
我收到一個錯誤,即Transaction class has no method Get_item
,是的,它沒有,但是它持有的東西。
我試過使數組變成指針數組,並使用->
運算符進行訪問。 但是問題仍然存在。
實碼::::::
vector<Transaction *> trans;
....
Order order(words[0], words[1], words[2], words[3], words[4], words[5]);
trans.push_back(&order);
....
trans[i]->Getitem(); //error here.
像Transaction trans[100];
這樣的數組Transaction trans[100];
不能包含Transaction的子類,只能包含Transaction本身。 如果要讓數組保存任意的Transaction子類,請創建一個指針數組(原始與否無關緊要)。 向量和原始指針的示例:
std::vector<Transaction *> t;
t.push_bask(new Transaction()); //insert constructor params if necessary params
t.push_bask(new Order());
t[0]->getType();
t[1]->getType();
...
//and don't forget delete, or use smart pointers.
如果您還需要訪問父級中根本不可用的方法,則編譯器需要知道實際的類型,即。 希望您先進行適當的轉換。 如果您不能說出它是什么類型,就不能調用該方法。
((Order*)t[1])->getItem(); //you can do that because you know [1] is a Order
//but this is wrong and leads to UB:
((Order*)t[0])->getItem(); //wrong!
在某些(並非全部)情況下,dynamic_cast可以幫助測試某種類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.