zoukankan      html  css  js  c++  java
  • <<Effective c++>>读书笔记---条款19:设计class犹如设计type

      想要设计出高效的classes首先你必须了解你面对的问题。几乎每一个class都要求你面对一下提问,而你的回答往往导致你的设计规范:

    • 新type的对象应该如何被创建和销毁?

       构造函数、析构函数应该怎么写

    • 对象的初始化和对象的赋值该有什么样的差别?

        对象的赋值要注意资源的拷贝,初始化直接调用构造函数,而赋值会调用拷贝构造函数或赋值操作符=

    • 新type的对象如果被passed by value(以值传递),意味着什么?

        调用了拷贝构造函数,注意深拷贝和浅拷贝

    • 什么是type的"合法值"?

      

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

        多态,如果继承自现有的classes,你就受到那些classess的设计的束缚,特别是受到“它们的函数是virtual或non-virtual”的影响。如果其他类继承自你的class,那么你所声明的函数--尤其是析构函数--是否为virtual

    • 你的新type需要什么样的转换?

        显式和隐式类型转换

    • 声明样的操作符和函数对此type而言是合理的?

        这决定这我们需要声明那些函数

    • 什么样的标准函数应该驳回?

        那些正是你必须声明为private者

    • 谁该取用新type的成员?

        这个提问可以帮助你决定哪个成员为public,哪个为protected,哪个为private。它也帮助你决定哪一个classes和/或function应该是你的friends,以及将它们嵌套于另一个之内是否合理

    • 什么是新type的"未声明接口"(undecleared interface)?

      

    • 你的新type有多么一般化?

        是否要定义这个类,而是创建class template

  • 相关阅读:
    GitHub挂载网站
    JS中用execCommand("SaveAs")保存页面兼容性问题解决方案
    使用List,Dictionary加载数据库中的数据
    模拟在table中移动鼠标,高亮显示鼠标所在行
    ASP.NET AutoCompleteType 属性,这么多年的IT人你发现了吗?
    生成流水号
    在数据库中查找字符串(不知道表名的情况下 查找字符串)
    半角与全角之间的转换
    C#代码规范精简表
    有关Excel导出
  • 原文地址:https://www.cnblogs.com/jck34/p/4316772.html
Copyright © 2011-2022 走看看