• Effective C++ 条款19 设计class犹如设计type


    1. 设计优秀的class是一项艰巨的任务,因为设计好的types是一项艰巨的工作,好的types有自然的语法,直观的语义,以及一个或多个高效实现品.

    2. 要设计一个良好的class,需要思考以下问题:

        1). 新types对象应该如何被创建和销毁?

             涉及到构造函数,析构函数,内存分配和释放函数(operator new,operator new[],operator delete,operator delete[])的设计

        2). 对象的初始化和对象的赋值该有怎样的差别?

             涉及到构造函数和赋值操作符的行为以及它们的差异

        3). 新type的对象如果如果被pass-by-value(以值传递),意味着什么?

        4). 什么是type的合法值?

             对于class的成员变量而言,可能只有某些数据集是有效的,此时某些成员函数(特别是构造函数,赋值操作符和"setter"函数)必须进行的错误和检查工作,它也影响函数抛出的异       常,以及(极少使用的)函数异常明细列.

        5). 你的type需要配合某个继承图系(inheritance graph)吗?

            如果设计的type继承自某些类,就会收到哪些类的"函数是virtual或non-virtual"的影响;

            根据是否设计的type是否被继承,判断所声明的函数(尤其是析构函数)是否为虚.

        6). 你的新types需要什么样的转换?

            如果需要隐式转换,可以重载类型转换函数或允许non-explict-one-arguement(非explict单实参)构造函数.如果只允许显示转换,就专门写出负责执行转换的函数,且禁止类型     转换操作符和non-explict-one-arguement(非explict单实参)构造函数

        7). 什么样的操作符和函数对此新type而言是合理的?

        8). 什么样的标准函数应该驳回?

            声明为private或只声明不定义.(具体见条款6)

        9). 谁该取用新type的成员?

            决定哪些成员为public,哪些为protect,哪些为private,那些类和函数是friends,以及将它们嵌套于另一个之内是否合理.

        10). 什么是新type的未声明接口?

            明确它对效率,异常安全性(见条款29),以及资源运用(例如多任务锁定和动态内存)提供何种保证.

        11). 你的新type有多么一般化?

            判断是否直接定义一个新的class template.

        12). 你真的需要一个新type吗?

            如果只是为已有类添加新功能,说不定单纯定义一个或多个non-member函数或template即可.

        

        

  • 相关阅读:
    《Microsoft Sql server 2008 Internals》读书笔记第三章Databases and Database Files(2)
    《Microsoft Sql server 2008 Internals》读书笔记第五章Table(4)
    《Microsoft Sql server 2008 Internals》读书笔记第五章Table(1)
    《Microsoft Sql server 2008 Internals》读书笔记第三章Databases and Database Files(1)
    转载:Windows Azure Web Sites VS Web Role
    jQuery 的 ready 函数是如何工作的?
    什么是相关性以及为什么需要初始化它?
    云中漫步 2:使用 VS2012 与 Windows Azure Web 站点创建并发布 ASP.NET Web 应用程序
    转载:Window Azure 中的Web Role详解
    mybatis.net 5 嵌入资源与引用资源
  • 原文地址:https://www.cnblogs.com/reasno/p/4752821.html
Copyright © 2020-2023  润新知