设为首页 加入收藏

TOP

8.9.3 实现CBox类(3)
2013-10-07 16:10:20 来源: 作者: 【 】 浏览:88
Tags:8.9.3 实现 CBox

8.9.3  实现CBox类(3)

当然,不需要检查新对象的长度和宽度哪个更大,因为构造函数会自动将较大的值挑出来。可以将operator*()函数编写成左操作数是CBox对象的成员函数:
 

  1. // CBox multiply operator this*n  
  2. CBox operator*(int n) const  
  3. {  
  4. if(n % 2)  
  5. return CBox(m_Length, m_Width, n*m_Height);                                         // n odd  
  6. else  
  7. return CBox(m_Length, 2.0*m_Width, (n/2)*m_Height);             // n even  
  8. }  

在这里,使用%运算符判断n是偶数还是奇数。如果是奇数,则n % 2的值是1,if语句为true。如果是偶数,则n % 2的值是0,if语句为false。

现在即可使用刚才编写的函数,实现左操作数是整数的版本。可以将该函数编写成普通的非成员函数:
 

  1. // CBox multiply operator n*aBox  
  2. CBox operator*(int n, const CBox& aBox)  
  3. {  
  4. return aBox*n;  
  5. }  

该版本的乘法操作仅仅将操作数的顺序颠倒了一下,这样就可以直接使用前面的乘法运算符版本。至此,为CBox对象定义的算术运算符就全部完成了。最后可以看看如何实现两个分解运算符函数operator/()和operator%()。

3. 分解CBox对象

除法操作确定左操作数指定的CBox对象可以包含多少个右操作数指定的CBox对象。为了使问题相对简单,假设所有CBox对象都是以正常层序包装的 -- 即高度是垂直的,另外假设它们都是以相同的朝向包装的 -- 即长度方向相同。如果没有这些假设,问题可能变得相当复杂。

这样,该问题实际上就变为求出一层可以放多少个右操作数对象,再求出左操作数CBox对象中可以放几层。

可以将该运算符编写成下面这样的成员函数:

  1. int operator/(const CBox& aBox) const  
  2. {  
  3. // Number of boxes in horizontal plane this way  
  4. int tc1 = static_cast<int>((m_Length / aBox.m_Length))*  
  5. static_cast<int>((m_Width / aBox.m_Width));  
  6. // Number of boxes in horizontal plane that way  
  7. int tc2 = static_cast<int>((m_Length / aBox.m_Width))*  
  8. static_cast<int>((m_Width / aBox.m_Length));  
  9. //Return best fit  
  10. return static_cast<int>((m_Height/aBox.m_Height)*(tc1 > tc2   tc1 : tc2));  
  11. }  

该函数首先求出左、右操作数CBox对象的长度方向相同时,一层可以容纳多少个右操作数CBox对象,并将结果存入tc1。然后再求出右操作数CBox的长度与左操作数CBox的宽度同向时,一层可以容纳多少个右操作数对象。最后,使tc1和tc2中较大的数乘以可以包装的层数,并返回得到的值。该过程如图8-7所示。
 

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇11.2.1 WinMain()函数(5) 下一篇8.9.3 实现CBox类(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)