zoukankan      html  css  js  c++  java
  • 不要用多态处理数组

    很好理解,也很实用。

    首先复习一下数组的使用说明:

    class animal{.........};    
    class dog : public animal{.........};
    

    这时我们定义一个数组:

    dog manyDog[100];    //这里我们申请了100个dog大小的空间。
    

    我们知道: manyDog[index] 其实是等于 *(manyDog + 1)

    意思就是 manyDog是个执行数组起始处的指针。 manyDog 指向的内存跟 manyDog+i 指向的内存相隔多远?
    答案: i*sizeof(数组的对象)

    然后我们把数组跟多态放在一起:

    有个函数:

    void DeleteArray(const animal arry[] )
    {
        dalete[] arry;
    }
    

    这个时候我们把上面定义的manyDog数组传进去会发生什么?

    DeleteArray(manyDog);
    

    这样机器变异是不会报错的!!

    然而由于Delete被声明的传参是animal类型(父类),所以在批量删除的时候,还记得上面的 (manyDog + i)吗?
    移动到下一个对象位置的时候,就会立马出错!大多数子类都会增加内部成员变量,成员函数。

    所以后面的结局将是不可想象的~

  • 相关阅读:
    Spiral Matrix II
    N-Queens
    Jump Game II
    js改变div高度
    Jenkins + testNg + maven 项目持续集成
    bootstrap做的导航
    bootstrap左侧边栏
    WEB-INF下jsp跳转
    jsp页面无法解析EL表达式
    springMVC和mybatis整合,jsp对时间进行格式化
  • 原文地址:https://www.cnblogs.com/skyhuangdan/p/6298488.html
Copyright © 2011-2022 走看看