У меня есть суперкласса называется Transaction, он имеет методы:Доступ к методам подкласса из массива суперкласса в C++?
- Тип
- Guid
- Заказчик
то подкласс называется Order имеет эти методы :
- товар
- количество
- стоимость ...
так Заказать наследует от сделки.
Моя проблема заключается в том, что может быть несколько типов операций ... Заказы, оплата и т.д.
Поэтому я держать каждый тип транзакции в массиве, как это:
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.
См. Также: https://en.wikipedia.org/wiki/Object_slicing, http://stackoverflow.com/questions/274626/what-is-object-slicing –
Откуда вы знаете, что 'trans [i] 'указывает на' Order' (а не, скажем, на 'Payment'), и что вызов' GetItem() 'имеет смысл? Если все транзакции в векторе являются фактически заказами, тогда сохраните вектор 'Order *'. Если не все, то это вернулось к «как вы планируете знать, какие из них»? –
На самом деле я снова посмотрел, и я храню тип в транзакции –