У меня есть базовые и производные классы ниже, которые связаны с полиморфизмом (Latebinding):
class Base
{
....
};
class Derive:public Base
{
....
};
int main()
{
int n;
cin>>n;
Base *pt;
pt=new Derive[n];
for(int i=0;i<n;i++)
pt[i].Input();
}
Пока я вводил первый индекс pt [0], все нормально, но в index [1] программа вынуждена закрываться. Любая идея ?? Спасибо заранее.
Массив Base
это не массив Derived
, Derived
экземпляр может быть больше, чем Base
, а затем адресные вычисления становятся бесполезными, когда массив обрабатывается как массив Base
, По этой причине стандарт определяет Неопределенное поведение в этом случае.
Вместо этого вы можете использовать массив указателей на Base
,
Других решений пока нет …