void PreorderIterator::First(){ 
Iterator<Glyph*>* i=_root->CreateIterator(); if(i){ 
i->First(); 
_iterators.RemoveAll(); 
_iterators.Push(i); 


-------- 
其中_root->CreateIterator();返回的应当是指向_root的Iterator, 然后再做递归i->First();岂不是死循环了嘛. 我相信四位巨头所写的东西应该不会错,但自己就是不能明白。
我想知道的是:CreateIterator(); 和i->First(); 这两个方法到底做了什么工作。
非常感谢!

解决方案 »

  1.   

    void PreorderIterator::First(){ 
    Iterator<Glyph*>* i=_root->CreateIterator(); if(i){ 
    i->First(); //这里不是调用的PreorderIterator::First()
    _iterators.RemoveAll(); 
    _iterators.Push(i); 


      

  2.   

    具体调用那个First由root的类型确定,这是多态的基础
      

  3.   

    sorry有点笔误->First(); //这里不是调用的PreorderIterator::First()
    ===>依赖于root如何实现CreateIterator