为生存而奔跑

   :: 首页 :: 联系 :: 聚合  :: 管理
  271 Posts :: 0 Stories :: 58 Comments :: 0 Trackbacks

留言簿(5)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 267061
  • 排名 - 83

最新评论

阅读排行榜

评论排行榜



#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重载的<<操作符


posted on 2011-03-30 16:15 baby-fly 阅读(373) 评论(1)  编辑 收藏 引用 所属分类: Effective STL / C++

Feedback

# re: More Effective C++ 不要对数组使用多态 2012-11-25 23:35 bstd
原来如此,我竟没有在意,多谢博主  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理