前言

我们在编写程序的时候,无论哪一种语言,总是会告诉你这种语言应该有的类型。我们将它们直接拿来使用,可是从来没有考虑过这些类到底是怎么设计出来的!

所幸的是:在OOP中,每当我们定义一个新的class,也就相当于定义了一个新type。

那么,一个好的type是怎样设计出来的呢?我们需要考虑哪些事情呢?

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函数)必须进行错误检查工作。

它也影响函数抛出的异常以及函数异常明细列(exception specifications)

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,更能达到目标。

最新文章

  1. ASP.NET Core 静态文件及JS包管理器(npm, Bower)的使用
  2. 利用DotSpatial发布WMS, WFS服务
  3. Win + D 和 Win + M的区别
  4. isNaN() 确认是否是数字
  5. 未找到arm-linux-gcc解决办法
  6. Linux free -m 详细说明
  7. java 各种排序算法
  8. android:http下载文件并保存到本地或SD卡
  9. oracle字符集
  10. PayPal为什么从Java迁移到Node.js
  11. Java设计模式之模板方法设计模式(银行计息案例)
  12. python3 函数传参练习 全局变量与局部变量 的理解
  13. Luogu4491 [HAOI2018]染色 【容斥原理】【NTT】
  14. Entity Framework入门教程(3)---EF中的上下文简介
  15. dubbo核心要点及下载(dubbo二)
  16. 二、2.1 Java的下载和安装
  17. 进程创建fork()
  18. es6 Array数组方法
  19. 回忆Partition算法及利用Partition进行快排
  20. Linux 小知识翻译 - 「协议(protocol)」

热门文章

  1. 真机无法接收到android.provider.Telephony.SMS_RECEIVED的问题
  2. (2015年郑州轻工业学院ACM校赛题) J 堆
  3. 在ASP.NET MVC中使用DropDownList
  4. 【Python】Python-skier游戏[摘自.与孩子一起学编程]
  5. DELL R710服务器可以安装的VMWare ESX Server 4.1 全套下载带注册码
  6. eclipse 项目报错问题
  7. windows下python配置
  8. HDU-4336 Card Collector 概率DP
  9. A Tour of Go Advanced Exercise: Complex cube roots
  10. 有return的情况下try catch finally的执行顺序(最有说服力的总结)