8.9.3 实现CBox类(6)
定义构造函数
需要修改类定义中无参数构造函数的声明,从而使其包含带默认值的参数,修改后的原型如下:
- explicit CBox(double lv = 1.0, double wv = 1.0, double hv = 1.0);
现在,可以实现该函数。打开Box.cpp文件-- 如果尚未打开的话,将构造函数的定义修改成如下形式:
- CBox::CBox(double lv, double wv, double hv) : m_Height(hv)
- {
- if(lv < 0.0 || wv < 0.0 || hv < 0.0)
- throw “Negative dimension specified for CBox object.”;
- m_Length = std::max(lv, wv);
- m_Width = std::min(lv, wv);
- // Length is now greater than or equal to width
- if(m_Height > m_Length)
- {
- m_Height = m_Length;
- m_Length = hv;
- // m_Height is still greater than m_Width so swap them
- double temp = m_Width;
- m_Width = m_Height;
- m_Height = temp;
- }
- else if( m_Height > m_Width)
- {
- m_Height = m_Width;
- m_Width = hv;
- }
- }
记住,成员函数形参的初始化列表只应该出现在类定义的成员声明中,而非函数的定义中。如果将它们放在函数定义中,则不能编译代码。前面曾经介绍过这里的代码,因此不再讨论。需要为algorithm头文件添加一个#include指令,以访问max()和min()函数。此刻最好单击Save工具栏按钮保存文件。应该养成在切换到其他窗口之前,保存所编辑文件的习惯。如果需要再次编辑构造函数,那么通过在Class View选项卡底下的窗格中双击相应的项目,或者从代码显示窗格右上角的下拉菜单中选中该函数,即可轻松地使之再次出现在屏幕上。
在Class View窗格中单击类名可以把类的成员显示在下部的窗格中。还可以通过在Class View窗格中右击相应的名称,并从出现的上下文菜单中选择适当的菜单项,直接进入.cpp文件中某个成员函数的定义或.h文件中该函数的声明。
添加函数成员
现在需要给CBox类添加前面看到的所有函数。此前,在类定义内部定义了一些函数成员,因此这些函数将自动成为内联函数。如前所述,首先为utility头文件添加一个#include指令以访问Box.h,再为std::rel_ops名称空间添加一个using指令为一些比较运算符提供模板。为了把operator<()添加为内联函数,在Class View窗格中右击CBox,并从上下文菜单中选择Add | Add Function菜单项,然后就可以在显示的对话框中输入定义函数的数据,该对话框如图8-10所示。

Return Type和Parameter Type下拉列表包含一组有限范围的类型。如果需要的类型没有出现在列表中,只需手工输入它们。图8-10显示了输入定义函数的数据之后、添加形参之前的对话框。必须添加Add按钮,才能添加形参。接着形参就显示在对话框右边的形参列表中。如果没有选中Inline,该函数原型就出现在类定义中,并把一个函数框架添加到Box.cpp文件中。还必须在CBox类定义中编辑声明,使该函数声明为const,再给函数体添加实现代码。现在它应如下所示:
- // Less-than operator for CBox objects
- bool CBox::operator<(const CBox& aBox) const
- {
- return Volume() < aBox.Volume();
- }