考试网 >> IT认证 >> 水平 >> 程序员 >> C++箴言:将强制转型减到最少

C++箴言:将强制转型减到最少

发布时间:2006-06-28 02:47     点击:
分页:上一页  1 2 3 4 [5] 6 7  下一页

  第一个,使用存储着直接指向派生类对象的指针的容器,从而消除通过基类接口操控这个对象的需要。例如,如果在我们的 Window/SpecialWindow 继承体系中,只有 SpecialWindows 支持 blinking,对于这样的做法:   

  class Window { ... };   

  class SpecialWindow: public Window {

  public:

  void blink();

  ...

  };

  typedef // see Item 13 for info

  std::vector > VPW; // on tr1::shared_ptr   

  VPW winPtrs;

  ...   

  for (VPW::iterator iter = winPtrs.begin(); // undesirable code:

  iter != winPtrs.end(); // uses dynamic_cast

  ++iter) {

  if (SpecialWindow *psw = dynamic_cast(iter->get()))

  psw->blink();

  }

  设法用如下方法代替:   

  typedef std::vector > VPSW;   

  VPSW winPtrs;   

  ...   

  for (VPSW::iterator iter = winPtrs.begin(); // better code: uses

  iter != winPtrs.end(); // no dynamic_cast

  ++iter)

  (*iter)->blink();

  当然,这个方法不允许你在同一个容器中存储所有可能的 Window 的派生类的指针。为了与不同的窗口类型一起工作,你可能需要多个类型安全(type-safe)的容器。

  一个候选方法可以让你通过一个基类的接口操控所有可能的 Window 派生类,就是在基类中提供一个让你做你想做的事情的虚函数。例如,尽管只有 SpecialWindows 能 blink,在基类中声明这个函数,并提供一个什么都不做的缺省实现或许是有意义的:   

分页:上一页  1 2 3 4 [5] 6 7  下一页
版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
发表评论: 匿名发表 用户名: 查看评论
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容
本站提醒:不要进行人身攻击。谢谢配合。
在本站搜索相关信息
2003-2005 Ksw123.com All Rights Reserved. - TOP
Copyright © 2006 Ksw123.com. All rights reserved.中国考题网 版权所有