动态内存的后期绑定

LateBinding with dynamic memory

我在下面有与多态性(后期绑定)相关的 Base 和 Derive class :

 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.

的指针数组