首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 编程交流与学习--More Effective C++的学习-Item M33:将非尾端类设计为抽象类
【标  题】:编程交流与学习--More Effective C++的学习-Item M33:将非尾端类设计为抽象类
【关键字】:--More,Effective,C++,-Item,M33
【来  源】:http://blog.csdn.net/swordll80/archive/2006/10/30/1357609.aspx

编程交流与学习--More Effective C++的学习-Item M33:将非尾端类设计为抽象类

class AbstractAnimal {

protected:

  AbstractAnimal& operator=(const AbstractAnimal& rhs);

public:

  virtual ~AbstractAnimal() = 0;                     // see below

  ...

};

class Animal: public AbstractAnimal {

public:

  Animal& operator=(const Animal& rhs);

  ...

};

class Lizard: public AbstractAnimal {

public:

  Lizard& operator=(const Lizard& rhs);

  ...

};

class Chicken: public AbstractAnimal {

public:

  Chicken& operator=(const Chicken& rhs);

  ...

};

这个设计给你所以你需要的东西。同类型间的赋值被允许,部分赋值或不同类型间的赋值被禁止;派生类的赋值操作函数可以调用基类的赋值操作函数。此外,所有涉及AniamlLizardChicken类的代码都不需要修改,因为这些类仍然操作,其行为与引入AbstractAnimal前保持了一致。肯定,这些代码需要重新编译,但这是为获得“确保了编译通过的赋值语句的行为是正确的而行为可能不正确的赋值语句不能编译通过”所付出的很小的代价。

最后,一般的规则是:非尾端类应该是抽象类。在处理外来的类库时,你可能需要违背这个规则;但对于你能控制的代码,遵守它可以提高程序的可靠性、健壮性、可读性、可扩展性。

 

 
编程交流与学习--More Effective C++的学习-Item M34:如何在同一程序中混合使用C++和C:【上一篇】
编程交流与学习--More Effective C++的学习-Item M32:在未来时态下开发程序:【下一篇】
【相关文章】
  • 编程交流与学习--More Effective C++的学习-Item M34:如何在同一程序中混合使用C++和C
  • 编程交流与学习--More Effective C++的学习-Item M35:让自己习惯使用标准C++语言
  • 15位身份证号码转换成18位(c++实现)
  • 《深度探索C++对象模型》中文非扫描版1-2章
  • VC++ MFC 多线程及线程同步
  • Two Bugs of VC++.NET2005 IDE
  • 解析C/c++语言中的sizeof
  • Linux C++程序运行的问题
  • 学习笔记-Effective STL-容器
  • 这是VC++.NET2005的问题吗?
  • 【随机文章】
  • 一个不错的JDBC连接池教程(带具体例子)
  • 林哥客户订单
  • 用rsync实现网站镜像和备份
  • 大唐可持续运营的3.5GHz无线接入系统
  • 制作集成SP1的XP启动光盘
  • Linux+FreeBSD mini-HOWTO
  • 病毒名称 TrojanProxy.Emailer
  • 用C#创建Windows(NT)服务
  • [高级玩机指南3] CX65的内存损耗原因分析和解决办法 [转]
  • 银行ATM机监控数据管理应用
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.