#include<iostream>
using namespace std;
class BST
{
public:
BST(int id=0)
{
this->id=id;
}
friend ostream& operator<<(ostream& os,const BST & bst);
protected:
int id;
};
ostream& operator<<(ostream& os, const BST& bst)
{
os<<bst.id<<endl;
return os;
}
class BalancedBST: public BST
{
public:
BalancedBST(int id=0,int id2=10):BST(id),id2(id2){}
friend ostream& operator<<(ostream& os,const BalancedBST & bbst);
private:
double id2;
};
ostream& operator<<(ostream& os,const BalancedBST& bbst)
{
os<<bbst.id<<"\t"<<bbst.id2<<endl;
return os;
}
void printBSTArray(ostream& os, BST* bstArray, int arraysize)
{
for(int i=0;i<arraysize;i++)
{
os<<bstArray[i];
}
}
int main()
{
BalancedBST bbstArray[4]={BalancedBST(0),BalancedBST(1),BalancedBST(2),BalancedBST(3)};
printBSTArray(cout,bbstArray,4);
}
由于BalancedBST多了一个成员double id2,所以printBSTArray()计算偏移时会出错。
如果BalancedBST多的成员类型时int,结果会很有意思。
我想,错误的原因主要是因为 我们把bbstArray的首地址传给了printBSTArray函数,但是里面的BalancedBST类型的对象没有转型(即没有被slice)。 好像没有多态的存在吧。因为 os<<bstArray[i] 还是使用BST重载的<<操作符