《C++面向对象软件设计及构建》文章翻译:2.4重载方法,2.4 Overloaded Operations
在某些场景下,某个类,可能会提供多种候选方式来让妳完成同一个操作,这种情况常见于构造函数中。这些候选手段,其具体定义是,具有相同名字的方法,但它们的参数列表不同。下面展示的是,修改过后的Frame 类,其中包含着重载的构造函数,和重载的方法。
|
private: // 封装过的实现位于此处 public: Frame (char *name, int initXCoord, int initYCoord, int initWidth, int initHeight); Frame (char *name, int initXCoord, int initYCoord); Frame (char *name); Frame (); void Resize ( int newHeight, int newWidth ); void Resize ( float factor ); void Clear(); // 清空整个框架 void Clear(int x, int y, int w, int h); // 清空指定的矩形区域 void TextSize(char* text, int& w, int& h); // 便利方法 ... // 其它方法,与 版本1 中一致 }; |
第一个构造函数需要5个参数 - 其中一个是名字,其中两个用于指定位置,另外两个用于指定尺寸。第二个构造函数,仅需要名字和位置参数。当用户使用这个构造函数时,其中两个参数用于指定该个Frame 在屏幕上的位置,但是,该对象自己会根据某种算法或者默认值来选择Frame 的尺寸。在第三个构造函数中,用户向Frame 指定了其名字,但是,由构造函数自己来根据某种算法或默认值来决定Frame 的位置和尺寸。最后那个构造函数,不需要任何参数,会由该个对象来自行决定其名字、位置和形状。
以下是对这些重载的构造函数的使用示例:
Frame exact ("First Window", 50, 50, 100, 200); // 使用第一 个构造函数
Frame here ("Second Window", 50, 50); // 使用第二 个构造函数
Frame simple ("Third Window"); // 使用第三 个构造函数
Frame any; // 使用第四 个构造函数
如果某些参数有着公认的有意义的默认值,或者能够狠简单地计算出来的话,那么,使用重载的构造函 数就狠有用。这样的话,这个对象的用户,就能够得到一些解脱,不用指定那些狠常见或者并不重要的参数信息。一系列重载的构造函数,就能够赋予这个类的用户以更多的灵活性,用户可以按照自己需要的程度来控制该个对象的构造过程的细节。
Resize方法,展示的是,对于构造函数之外的方法,重载是如何使用的。带有两个整数参数的版本,会将窗口的大小改变成指定的宽度和高度。Resize 的第二个版本,会将窗口的尺寸按照指定的比例来改变;比例大于1.0,则会导致窗口的宽度和高度变大;比例小于1.0,则会导致窗口的宽度和高度变小。
可按照以下方式来使用 Resize 方法:
exact.Resize(100, 100); // 变成 一个100 X 100 的正方形
exact.Resize(1.5); // 增大50% 的比例
exact.Resize(0.5); // 缩小 成当前尺寸的50%
Clear 方法也被重载了。这个方法的不带参数的版本,会将整个框架清空。Clear 方法中的那个带有4个参数的版本,可用来清空框架中指定的矩形区域,而不影响到矩形之外的任何东西。为了将重载的Clear 方法用于擦除文字内容,我们向Frame 类中加入了一个辅助方法TextSize,它能够计算出由某个文字字符串占用的矩形区域的宽度和高度。例如,为了计算出文字内容"Hello World"的矩形区域尺寸,可按照以下方式来调用TextSize 方法:
int w, h; // 用于记录结果 的变量
exact.TextSize("Hello World", w, h);
注意,其中的两个整数参数是输出参数;它们被声明为指向整数的引用(int&)。
下面展示了对于重载的Clear 方法的一个更完整的用法。这砣代码片断,从Frame 对象中擦除一个文字字符串("Hello World"),而保留了另一个文字字符串("This is Great!")。
Frame window("Clear Test", 100,100, 200,200);
window.DrawText("Hello World", 20, 20);
window.DrawText("This is Great!", 50,50);
int w, h;
window.TextSize("Hello World", w, h);
window.Clear(20, 20, w, h); // 擦除"Hello World"
1.构造一个窗口,并使用不带参数的构造函数,看看构造函数为该窗口选择了什么名字。创建两个这样的窗口,并比较它们的名字。
2. 简单按钮 :编写一个程序,它会在一个窗口中顶部显示妳的名,再在中部显示一个圆圈,其中有文字"Push Here"。当用户在圆圈中任何位置点击时,擦除界面上显示的妳的名,替换成妳的姓。再次点击圆圈中任何位置,会导致擦除妳的姓,替换成妳的名。后续在该圆圈中任何位置的点击,都会交替地显示妳的名和姓。
3. 缩小窗口 之 1:编写一个程序,它在屏幕中心附近放置一个尺寸为 500 x 500 的窗口。保持这个位置不变,将窗口缩小19次,每次让它比上次减小25个尺寸单位。使用那个需要两个整数参数的Resize 版本。
4. 缩小窗口 之 2:编写一个程序,它在屏幕中心附近放置一个尺寸为 500 x 500 的窗口。保持这个位置不变,将窗口缩小19次,每次让它在当前尺寸的基础上减小10%。使用那个需要一个浮点数参数的Resize 版本。
5. 心跳 之 1:编写一个程序,它会按照缩小窗口之 1 中的方式,先将窗口缩小,再将窗口放大到原来的尺寸。
6. 心跳 之 2:编写一个程序,它会按照缩小窗口之 2 中的方式,先将窗口缩小,再将窗口放大到原来的尺寸。
未知美人
钢铁侠
Your opinionsHxLauncher: Launch Android applications by voice commands