设为首页 加入收藏

TOP

8.9.3 实现CBox类(2)
2013-10-07 16:08:39 来源: 作者: 【 】 浏览:58
Tags:8.9.3 实现 CBox

8.9.3  实现CBox类(2)

这些默认定义为内联函数。

必须在类外部把左操作数是double类型的运算符函数定义为普通函数:
 

  1. //  Function for testing if a value is > a CBox object  
  2. inline bool operator>(const double& value, const CBox& aBox)  
  3. {       return value > aBox.Volume(); }  
  4. //  Function for testing if a value is < CBox object  
  5. inline bool operator<(const double& value, const CBox& aBox)  
  6. {       return value < aBox.Volume(); }  
  7. //  Function for testing if a value is >= a CBox object  
  8. inline bool operator>=(const double& value, const CBox& aBox)  
  9. {       return value >= aBox.Volume(); }  
  10. //  Function for testing if a value is <= CBox object  
  11. inline bool operator<=(const double& value, const CBox& aBox)  
  12. {       return value <= aBox.Volume(); }  
  13. //  Function for testing if a value is == a CBox object  
  14. inline bool operator==(const double& value, const CBox& aBox)  
  15. {       return value == aBox.Volume(); }  
  16. //  Function for testing if a value is != CBox object  
  17. inline bool operator!=(const double& value, const CBox& aBox)  
  18. {       return value != aBox.Volume(); }  

现在,我们已经得到一套完整的处理CBox对象的比较运算符。记住,这些运算符同样可以处理表达式,只要表达式最终产生类型正确的对象就行。因此,必须能够使用其他重载运算符来合并表达式。

2. 合并CBox对象

现在需要解决的问题是重载+、*、/和%运算符,下面依次实现它们。Ex8_06.cpp中的加法操作具有下面的原型:

CBox operator+(const CBox& aBox);       // Function adding two CBox objects

虽然原来实现的加法运算符并不是理想的解决方案,但还是要继续使用,以避免使CBox类过于复杂。最好是设计一个程序来检查两个操作数是否有尺寸相同的面,如果有,则顺着这样的面进行连接,但编码工作会很麻烦。当然,如果这是个实际的应用程序,那么可以稍后再来开发更好的加法操作,并替换现有的版本,而使用原来版本编写的任何程序都无需修改就能继续运行。类的接口与实现相分离,对于有效的C++(www.cppentry.com)编程(www.cppentry.com)具有决定性意义。

注意,本书不再详述减法运算符。这是个明智的决定,可以避免实现过程中固有的复杂性。如果您实在对此充满热情,而且觉得实现该运算符切合实际,那么可以试一下,但需要决定当得到的体积结果为负数时应该怎么办。如果允许体积为负数,则需要解决哪些箱子的尺寸可以是负数,以及在随后的操作中如何处理这类箱子等问题。更简单的概念可能是CBox对象相减得到一个体积。

乘法操作非常容易,只是创建一个可包含n个箱子的箱子而已,其中n是乘数。最简单的解决方案是保持对象的m_Length和m_Width不变,然后使高度乘以n,从而得到新的CBox对象。我们可以使该函数更智能化一些,即检查一下乘数是不是偶数,如果是,则使m_Width加倍,这样箱子将并排堆放,然后只需要使m_Height乘以n的1/2即可。该机制如图8-6所示,CBox对象是aBox乘以3和6的结果。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇8.9.3 实现CBox类(1) 下一篇8.4 运算符重载

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·python数据分析岗的 (2025-12-25 10:02:21)
·python做数据分析需 (2025-12-25 10:02:19)
·成为一个优秀的pytho (2025-12-25 10:02:16)
·Java后端面试实习自 (2025-12-25 09:24:21)
·Java LTS版本有哪些 (2025-12-25 09:24:18)