2005年8月27日

摘要: 文件结构 重要性 审查项 结论 头文件和定义文件的名称是否合理? 头文件和定义文件的目录结构是否合理? 版权和版本声明是否完整? 重要 头文件是否使用了 ifndef/define/endif 预处理块? 头文件中是否只存放“声明”而不存放“定义” …… 程序的版式 重要性 ... 阅读全文
posted @ 2005-08-27 11:22 开心就好 阅读(278) 评论(0) 推荐(0) 编辑
 
摘要: 若在逻辑上A是B的“一部分”(a part of),则不允许B从A派生,而是要用A和其它东西组合出B。 例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,不是派生而成。如示例10-2-1所示。 class Eye { public: void Look(void); }... 阅读全文
posted @ 2005-08-27 11:19 开心就好 阅读(146) 评论(0) 推荐(0) 编辑
 
摘要: 如果我们实在不想编写拷贝构造函数和赋值函数,又不允许别人使用编译器生成的缺省函数,怎么办? 偷懒的办法是:只需将拷贝构造函数和赋值函数声明为私有函数,不用编写代码。 例如: class A { … private: A(const A &a); // 私有的拷贝构造函数 A & operate... 阅读全文
posted @ 2005-08-27 11:12 开心就好 阅读(113) 评论(0) 推荐(0) 编辑
 
摘要: // 拷贝构造函数 String::String(const String &other) { // 允许操作other的私有成员m_data int length = strlen(other.m_data); m_data = new char[length+1]; strcpy(m_data, other.m_data); } ... 阅读全文
posted @ 2005-08-27 11:11 开心就好 阅读(663) 评论(0) 推荐(0) 编辑
 
摘要: 由于并不是所有的对象都用拷贝构造函数和赋值函数。所以在使用的时候如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐含了错误。以类String的两个对象a,b为例,假设a.m_data的内容为“hello”,b.m_data的内容为“world”。现将a赋给b,缺省赋值函数的“位拷贝”意味着执行b.m_data = a.... 阅读全文
posted @ 2005-08-27 11:03 开心就好 阅读(120) 评论(0) 推荐(0) 编辑