经过一个学期的学习。陆续实现了各种结构。近日查看这些实现代码发现由于当时水平有限,代码中不安全处很多、于是决定重构代码,
第一步。尽量使用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函数。源代码见我原创网站。网址在左边链接拦中,。
第三步,类型参数化,使用模板
考虑,想支持泛型算法,
困难,尚未实现。等待下次重构,