#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多了一個(gè)成員double id2,所以printBSTArray()計(jì)算偏移時(shí)會(huì)出錯(cuò)。
如果BalancedBST多的成員類(lèi)型時(shí)int,結(jié)果會(huì)很有意思。
我想,錯(cuò)誤的原因主要是因?yàn)?我們把bbstArray的首地址傳給了printBSTArray函數(shù),但是里面的BalancedBST類(lèi)型的對(duì)象沒(méi)有轉(zhuǎn)型(即沒(méi)有被slice)。 好像沒(méi)有多態(tài)的存在吧。因?yàn)?os<<bstArray[i] 還是使用BST重載的<<操作符