设为首页 加入收藏

TOP

8.6.3 实现CBox类(5)
2013-10-07 12:35:00 来源: 作者: 【 】 浏览:76
Tags:8.6.3 实现 CBox

8.6.3  实现CBox类(5)

定义构造函数

我们需要修改类定义中无参数构造函数的声明,从而使其包含带默认值的参数,修改后的原型如下:

  1. CBox(double lv = 1.0, double wv = 1.0, double hv = 1.0); 

现在,我们可以实现该函数。打开Box.cpp文件-- 如果尚未打开的话,将构造函数的定义修改成如下形式:

  1. CBox::CBox(double lv, double wv, double hv)  
  2. {  
  3. lvlv = lv <= 0.0   1.0 : lv;  
  4.     // Ensure positive  
  5. wvwv = wv <= 0.0   1.0 : wv;  
  6.     // dimensions for  
  7. hvhv = hv <= 0.0   1.0 : hv;  
  8.     // the object  
  9.  
  10. m_Length = lv>wv   lv : wv;  
  11. // Ensure that  
  12. m_Width = wv<lv   wv : lv;  
  13.     // length >= width  
  14. m_Height = hv;  

记住,成员函数形参的初始化列表只应该出现在类定义中的成员声明中,而非函数的定义中。如果将它们放在函数定义中,则代码将不能编译。前面曾经介绍过这里的代码,因此不再讨论。此刻单击Save工具栏按钮保存文件是个好主意。应该养成在切换到其他窗口之前,保存所编辑文件的习惯。如果需要再次编辑构造函数,那么通过在Class View选项卡底下的窗格中双击相应的项目,或者从代码显示窗格右上角的下拉菜单中选中该函数,即可轻松地使之再次出现在屏幕上。

我们还可以通过在Class View窗格中右击相应的名称,并从出现的上下文菜单中选择适当的菜单项,直接进入.cpp文件中某个成员函数的定义或.h文件中该函数的声明。

添加函数成员

现在需要给CBox类添加前面看到的所有函数。此前,我们在类定义内部定义了若干函数成员,因此这些函数将自动成为内联函数。通过在类定义中手工为这些函数输入代码,或者使用Add Member Function Wizard,我们可以达到相同的结果。

有人可能认为,我们可以在.cpp文件中定义各个内联函数,然后给这些函数定义添加inline关键字。但这里的问题是内联函数终归不是"真正的"函数。因为各个函数体的代码必须直接插入到调用它的位置,所以函数定义必须在包含它的文件被编译时可以使用。如果不能,我们将得到连接器生成的错误,程序将不能运行。如果我们希望成员函数是内联函数,则必须在类的.h文件中包括函数定义。在.h文件中,这些函数可以在类定义内部定义,也可以紧跟在类定义之后定义。我们应该将任何需要的全局内联函数放入.h文件,并将该文件嵌入任何使用这些函数的.cpp文件。

为了添加内联的GetHeight()函数,应当在Class View选项卡上右击CBox,并从上下文菜单中选择Add | Add Function…,然后我们就可以在显示出来的对话框中输入定义函数的数据,该对话框如图8-11所示。

 
(点击查看大图)图  8-11
我们可以通过下拉列表将返回类型指定为double,但也可以直接输入。显然,对于那些没有出现在列表中的类型,我们只能从键盘上输入。选中inline复选框将确保GetHeight()被创建成内联函数。注意其他几个将函数声明为static、virtual或pure的选项。我们知道,静态成员函数可以独立于任何类对象存在。我们将在第9章讨论虚函数和纯虚函数。GetHeight()函数没有形参,因此不需要再添加什么内容。单击OK按钮将给Box.h文件中的类定义添加这个函数定义。如果我们为GetWidth()、GetLength()和Volume()成员函数重复上述过程,则Box.h文件中的CBox类定义将如下所示:
  1. #pragma once  
  2.  
  3. class CBox  
  4. {  
  5. public:  
  6. CBox(double lv = 1.0, double wv = 1.0, double hv = 1.0);  
  7. ~CBox(void);  
  8. private:  
  9. // Length of a box in inches  
  10. double m_Length;  
  11. // Width of a box in inches  
  12. double m_Width;  
  13. // Height of a box in inches  
  14. double m_Height;  
  15. public:  
  16. double GetHeight(void)  
  17. {  
  18. return 0;  
  19. }  
  20.  
  21. double GetWidth(void)  
  22. {  
  23. return 0;  
  24. }  
  25.  
  26. double CBox::GetLength(void)  
  27. {  
  28. return 0;  
  29. }  
  30.  
  31. // Calculate the volume of a box  
  32. double Volume(void)  
  33. {  
  34. return 0;  
  35. }  
  36. }; 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇8.6.3 实现CBox类(6) 下一篇8.6.3 实现CBox类(4)

评论

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