zoukankan      html  css  js  c++  java
  • effective C++ 条款 19:设计class犹如设计type

    设计优秀的classes和是一项艰巨的工作,因为设计好的types是一项艰巨的工作。设计出至少像c++内置类型一样好的classes。

    几乎每一个class都要求面对以下提问,回答往往导致你的设计规范:

    1,新type的对象应该如何创建和销毁?

    包括构造和析构函数,内存分配和释放函数(operator new, operator delete,operator new[], operator delete[])等。

    2,对象的初始化和对象的赋值有什么样的区别?

    决定了你的构造函数和赋值操作符的行为,以及其间的差异。

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

    copy构造函数用来定义一个type的pass-by-value该如何实现。

    4,什么是新type的合法值?

    对class的成员变量而言,通常只有某些值是有效的。决定了你的成员函数(特别是构造函数、赋值操作符和所谓的setter函数)必须进行错误检查工作。

    5,你的新type需要继承某个继承图系吗?

    如果继承某些既有的class,你就受那些class的设计的束缚,特别是它们的函数是virtual或non-virtual的影响。如果你允许其他class继承你的class,那会影响你所声明的函数(尤其是析构函数)是否为virtual。

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

    如果希望允许类型T1被隐式转换为类型T2, 就必须在class T1内写一个类型转换函数(operator T2)或在class T2中写一个non-explicit-one-argument的构造函数。或者一个专门执行显示转化的函数。

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

    class该声明哪些函数。

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

    那些正是你应该声明为private的。如不希望拷贝构造函数

    9,谁该取用新type的成员?

    决定哪个成员为public, protected, private,决定哪些classes和/或functions应该是friends。

    10,什么是新type的“未声明接口”?

    对效率、异常安全性、以及资源运用提供何种保证?这些保证将为你的代码加上相应的约束条件。

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

    是不是一整个types家族,决定是不是要定义一个class template而非class。

    12,你真需要一个type吗?

    如果只是定义新的derived class以便为既有的class添加机能, 那么说不定单纯定义一个或多个non-member函数或templates,更能达到目标。

  • 相关阅读:
    IKAnalyzer
    stanford corenlp的TokensRegex
    Linux网络编程-tcp缓存设置
    Java NIO(2):缓冲区基础
    Java NIO(1):迟迟登场的NIO
    git的笔记和使用中的一些技巧的总结
    vagrant 系列 博客
    flutter创建swift kotlin项目
    react eject 命令失败
    react native react-native-vector-icons/Ionicons 出现 Unrecognized font family的错误
  • 原文地址:https://www.cnblogs.com/lidan/p/2324638.html
Copyright © 2011-2022 走看看