zoukankan      html  css  js  c++  java
  • 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即可.

        

        

  • 相关阅读:
    CodeForces 510C Fox And Names (拓扑排序)
    Codeforces 1153D Serval and Rooted Tree (简单树形DP)
    HDU 6437 Problem L.Videos (最大费用)【费用流】
    Luogu P3381 (模板题) 最小费用最大流
    Codeforces 741B Arpa's weak amphitheater and Mehrdad's valuable Hoses (并查集+分组背包)
    Codeforces 1144F Graph Without Long Directed Paths (DFS染色+构造)
    HDU 2204 Eddy's 爱好 (容斥原理)
    Codeforces 939E Maximize! (三分 || 尺取)
    Codeforces 938D. Buy a Ticket (最短路+建图)
    CodeForces 959E Mahmoud and Ehab and the xor-MST (MST+找规律)
  • 原文地址:https://www.cnblogs.com/reasno/p/4752821.html
Copyright © 2011-2022 走看看