Effect C++ 学习笔记四: 设计与声明

十八:Make interfaces easy to use correctly and hard to use incorrectly 让接口容易被正确使用,不易被误用

以下:

class Data
{
public:
	Data(int month, int day, int year);
	//..
};

这种类设计容易引起的客户错误:

1.以错误的次序传递参数

2.传递一个无效的月份或天数。

解决方案:

1.导入新的结构区别天数,月份,年份,然后在Data构造函数中使用这些类型:

然后在各自的类型中做一些限制,保持数据安全性。

2.限制类型内什么事可以做,什么事不能做。例如 const等等。

3.一致化接口的功能,

总结:

1.好的接口很容易被正确使用,不容易被误用。

2.“促进正确使用”的办法包括接口的一致性,以及与内置类型的行为兼容。

3.“阻止误用”的办法包括建立新类型,限制类型上的操作,束缚对象值,以及消除客户的资源管理责任。

4.tr1::shared_ptr 支持定制型删除器。可防范DLL问题,可被用来自动解除互斥锁等等。

十九:Treat class design as type design.设计class犹如设计type

需要考虑到的设计规范:

1.新类型的对象应该如何被创建和销毁。

  这会影响到class的构造函数和析构函数以及内存分配函数和释放函数。

2.对象的初始化和对象的赋值该有什么样的差别。

区别“初始化”和“赋值”

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

4.对class的成员变量而言,通常只有某些数值集是有效的,这些数值集决定class必须维护的约束条件。

5.判断类是否需要被继承, 影响函数特别是析构函数是否是virtual

6.判断类需要怎么样的转换。

7.判断类需要什么要的操作符。

8.判断哪些member需要被声明为private,禁止访问

9.谁该取用新type的成员?判断哪些为public,哪些为protected,判断哪一个class或者function是友元。

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

11.新type有多么一般化

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

二十:Prefer pass-by-reference-to-const to pass-by-value 宁以pass-by-reference-to-const 替换 pass-by-value

二十一:Don't try to return a reference when you must return an object.必须返回对象时,别妄想返回其reference

二十二:Declare data members private.将成员变量声明为private。

二十三:Prefer non-member non-friend functions to member functions。宁以non-member,non-friend替换member函数

二十四:Declare non-member functions when type conversions should apply to all parameters。若所有参数皆需类型转换,请为此采用non-member函数

发布了35 篇原创文章 · 获赞 5 · 访问量 410

猜你喜欢

转载自blog.csdn.net/qq_33776188/article/details/103068906