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

    class BST{...};
    class BalanceBST:public BST{...};

    vvoid printBstArray(ostream &s,const BST array[],int numElements)
    {
    for(int i = 0;i < numElements;++i)
    {
    s<<array[i]<<endl;
    }
    }

    array[i]其实是一个“指针算术表达式”的简写:他其实代表的是*(array+i).为了让编译器所产生的代码能够正确的走访整个数组,
    编译器必须能够有能力决定数组中对象的大小。当你给的BalanceBST他可能会误认为为BST对象,而一般dervied classes比base classes
    有更多的data memebers。当你尝试通过一个base class删除一个由derived class objects组成的数组。
    ***C++语言规范中说,通过base classe 指针删除一个由derived classes objects构成的数组,其结果未定义。
    结论:多态和指针算术又能混用。数组对象几乎总会涉及指针的算术运算,所以数组和多态不要混用。

  • 相关阅读:
    Codeforces Round #226 (Div. 2)
    内存管理
    C/C++ 函数
    Codeforces Round #225 (Div. 2)
    常用链表操作总结
    Codeforces Round #224 (Div. 2)
    Codeforces Round #223 (Div. 2)
    Codeforces Round #222 (Div. 2)
    -树-专题
    Codeforces Round #221 (Div. 2)
  • 原文地址:https://www.cnblogs.com/Mr-Zhong/p/4401015.html
Copyright © 2011-2022 走看看