Ваш код примечание вполне соответствует между типом obj
и типом arr
.Тем не менее, согласно симптомам, ваша проблема связана с нарезкой объектов :
arr[nelem]=obj;
Поскольку, согласно вашему определению arr
, arr[nelem]
будет иметь тип object
здесь, который является базовым классом.Поэтому, независимо от реального производного типа obj
, он будет преобразован обратно в базовый класс (и, следовательно, использовать виртуальные функции базового класса).
Если вы хотите иметь полиморфный контейнер, вам нужноиметь контейнер указателей, или, что лучше, умные указатели.И вместо массивов вы должны рассмотреть возможность использования векторов:
std::vector<std::shared_ptr<Object>> arr;
bool array::InputArray(std::shared_ptr<Object> obj) {
...
obj->input(cin);
arr.push_back(obj); // no need for nelem. Use arr.size() instead
return true;
}
Онлайн-демонстрация