不要以多态方式处理数组

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构成的数组,其结果未定义。
结论:多态和指针算术又能混用。数组对象几乎总会涉及指针的算术运算,所以数组和多态不要混用。

原文地址:https://www.cnblogs.com/Mr-Zhong/p/4401015.html