#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,結(jié)果會很有意思。
我想,錯誤的原因主要是因為 我們把bbstArray的首地址傳給了printBSTArray函數(shù),但是里面的BalancedBST類型的對象沒有轉(zhuǎn)型(即沒有被slice)。 好像沒有多態(tài)的存在吧。因為 os<<bstArray[i] 還是使用BST重載的<<操作符