经过一个学期的学习。陆续实现了各种结构。近日查看这些实现代码发现由于当时水平有限,代码中不安全处很多、于是决定重构代码,
第一步。尽量使用const修饰符,以防数据被意外修改。
1。const 函数形参。
?? 形如将 void fun (?char* )改为 void fun ( const chat* )
?? 使得函数能接受无左值实参。如函数实参,表达实参等等
2。const 返回值,
???? 形如将 bool?fun ( void )?改为 const bool fun?( void )?
?????进一步保证函数值安全返回,
???? 但是有一个麻烦。当返回值为指针时候,在调用端出现类型不匹配的问题?: 比如:
?? const int?*?fun ( void );
?? int *p = fun();//必出错,
? 解决方案有二。
?? 1,如确定无须再让p指向别处。则可把p改为const?指针
???? ?const int* p =?fun();
?? 2.利用强制类型转换:
????? ?int?*p = ( int* ) fun ();
??? ??缺点:语法难看。但有时候必须,如p是某个类的成员。则一般不可用const修饰,
3。const 成员函数
?? 形如?int fun ()?改为 int fun () const?
???注意:修改时候必须确保该函数不改变任何类成员,
第二步:每个类补充构造函数,和运算符集,
考虑1,使得可以支持泛型容器,如vector要求必有拷贝构造函数,
考虑2。提供接口多样化,可防止一些不必要的类型转换。如:cstring和string之间,
麻烦,有些结构要求递归。如二叉树,拷贝构造难以实现。
解决: 另定义copy函数。源代码见源码分类中的【头文件】c++实现二叉树、
第三步,类型参数化,使用模板
考虑,想支持泛型算法,
困难,尚未实现。等待下次重构,??????????????????