C++软件开发可以理解为设计一系列的类,让这些类相互使用,最终实现我们所需要的功能。类与类之间的相互关系可以很复杂,也可以很简单,如何简单高效的描述类与类之间的关系是设计的难点之一。遵循本文所提供的方法,将会给你一些灵感。
-
限制类型的办法:建立新类型,限制类型上的操作,束缚对象的值、消除客户管理资源的责任
- 限制函数的入参类型,可以保证参数不被错误传入
-
“促进接口被正确使用”的方法:接口的一致性
-
在版本发布的过程中,应该保持接口的一致性,不要随意更改接口
-
-
新的type对象应该如何被创建和销毁?
-
对象的初始化和赋值应该有什么样的差别?
-
pass-by-value or pass-by-reference ?
-
什么样的type合法 ?
-
需要什么样的类型转换?
-
需要定什么样的方法以及方法的权限 ?
-
等等
-
尽量以pass-by-reference-to-const代替pass-by-value,因为前者比较高效,原因是少一次类的拷贝动作
-
对于内置类型和STL,pass-by-value比较高效(特殊场景,单独说明)
-
绝对不要返回指针和引用指向local stack变量---直接导致偶发跑飞
-
绝对不要返回指针和引用指向heap变量,容易内存泄露,特别是多任务---容易导致忘记释放和多次释放的问题
namesace { class Web{} void ClearWeb(Web& web) //non-member non-friend }
class Rational { public: Rational(int x = 1, int y = 1) private: int x; int y; public: const Rational operator*(const Rational& rhs) { //错误,不满足交换律 } } //支持Rational的算术运行 const Rational operator*(const Rational& lhs, const Rational& rhs) { //正确,可以满足隐式类型转换和交换律 }
namespace std{ template <typename T> void swap(T& a, T&b) //需要类支持拷贝构造函数和拷贝赋值操作符 { T temp(a); a = b; b = temp; } }
-
如果需要自定义swap函数