c++ - 动态内存的后期绑定(bind)

标签 c++ oop polymorphism late-binding

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

 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 的指针数组。

关于c++ - 动态内存的后期绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36756856/

相关文章:

c++ - 成员函数替代名称

c++ - 尝试递增 std::map 迭代器时出现 SIGBUS

matlab - 对象方法中的自引用

php - 数据库对象类 PHP

c++ - 不直接继承的覆盖方法实现注入(inject)

oop - 多态性如何使我的代码更灵活?

c++ - 左值的 decltype 括号语法

c++ - 在 C++ 中查找不适用于特定测试用例的最长子字符串

python - super(ClassName,self).__init__() 有什么用

c++ - 模板方法的接口(interface)