C++程序设计实践教材
} // 构造函数,带缺省参数,缺省值为全0,在声明中指定 void Rectangle::Assign(int l, int t, int r, int b){
left = l; top = t; right = r; bottom = b; }
void Rectangle::Show(){
cout<<\
cout<<\ }//当用.h头文件时,不用endl输出次序可能出错 void Rectangle::operator+=(Rectangle& rect){
int x = rect.right - rect.left; int y = rect.bottom - rect.top; right += x; bottom += y; }
void Rectangle::operator-=(Rectangle& rect){
int x = rect.right - rect.left; int y = rect.bottom - rect.top; right -= x; bottom -= y; }
Rectangle operator- ( Rectangle &rect1, Rectangle& rect2){
//矩形相减,从rect1中减去rect2的长度和宽度 rect1 -= rect2; return rect1; }
Rectangle operator+ ( Rectangle &rect1, Rectangle& rect2){
//矩形相加,从rect1中加上rect2的长度和宽度 rect1 += rect2; return rect1; }
// 将上述内容保存为rect.cpp #include
Rectangle rect;
cout<<\初始rect:\ rect.Show();
rect.Assign(100,200,300,400); cout<<\赋值后rect:\ rect.Show();
Rectangle rect1(0,0,200,200); cout<<\初始rect1:\
31
第一章 控制台应用程序
rect1.Show(); rect+=rect1;
cout<<\与rect1相加后的rect:\ rect.Show(); rect-=rect1;
cout<<\减去rect1后的rect:\ rect.Show(); Rectangle rect2; rect2 = rect+rect1;
cout<<\与rect1相加所得rect2:\ rect2.Show(); rect2 = rect-rect1;
cout<<\减去rect1所得rect2:\ rect2.Show(); return 0;
} // 将上述内容保存为Exp12_1.cpp
[要求] 建立工程,录入上述程序,改变数据实验之。
[注意] 缺省的按语义定义的赋值运算符,不必用户定义,系统自动提供。
2. 编程:修改上题,要求如下: (1)将加减运算重载为成员函数;
(2) 为矩形类再增加一个静态数据成员 Counter,统计共产生了多少个矩形对象。 为 Counter 添加定义、赋初值及随程序运行而变化的代码,并在 main 函数中对 其输出。注意静态数据成员应该有定义性说明。
3. 阅读与理解:介绍 MFC 中的 CRect 类、CSize 和 CPoint 类。(可选) 介绍 CRect 之前需了解 Windows 的 RECT 结构,其定义如下:
typedef struct tagRECT { LONG left; LONG top; LONG right; LONG bottom; } RECT;
它定义了一个矩形的左上角和右下角的坐标,在应用 Windows API 开发应用 程序时,用 RECT 结构表示矩形,tagRECT 是 RECT 结构一个不太常用的名字。
可以用下列方法定义并初始化一个 RECT 结构:
RECT rctA; rctA.left = 20; rctA.top = 30; rctA.right = 180; rctA.bottom = 230;
或者
RECT rctB = {20,30,180,230};
32
C++程序设计实践教材
由于 MFC 是用面向对象方法设计的,引入了 CRect 类表示矩形,它类似于 RECT 结构,并封装了和矩形操作相关的 API 函数,包含了对 CRect 对象或 RECT 结构进行操作的成员函数,对 CRect 的成员函数来说,二者是可互换的。
注意,CRect 类是从 RECT 结构派生的,所以,RECT 的数据成员在 CRect 类中也是可访问的。CRect 的数据成员中,最好使 left 小于 right,top 小于 bottom, 得到一个正常的矩形。如果不是这样,CRect 的某些成员函数会得到错误结果, 但可以调用 CRect::NormalizeRect()函数对矩形进行处理,如果 left 小于 right,该 函数交换 left 和 right,如果 top 小于 bottom,交换 top 和 bottom。
与这一对矩形类型类似的,还有 CPoint 类与 POINT 结构,CSize 类与 SIZE 结构。
typedef struct tagPOINT { LONG x; LONG y; } POINT;
POINT 结构定义了一个点的 X 和 Y 坐标。
CPoint 是 MFC 中表示点的类,派生自 POINT 结构,封装了对 CPoint 和 POINT 进行操作的函数,主要是一些运算符函数。 typedef struct tagSIZE { int cx; int cy; } SIZE;
SIZE 结构定义了一个矩形的长度和宽度,也表示一个相对位置或相对坐标。 CSize 类与 SIZE 结构类似,可用于 RECT 应用的任何场合。它派生自 RECT 结 构,并封装了对二者进行操作的函数,主要是一些运算符函数。 下面是一些应用实例:
// four-integers are left, top, right, and bottom CRect rect(0, 0, 100, 50);
ASSERT(rect.Width() == 100); ASSERT(rect.Height() == 50); // Initialize from RECT stucture RECT sdkRect; sdkRect.left = 0; sdkRect.top = 0; sdkRect.right = 100; sdkRect.bottom = 50;
CRect rect2(sdkRect); CRect rect3(&sdkRect); ASSERT(rect2 == rect); ASSERT(rect3 == rect); // from a point and a size CPoint pt1(0, 0); CSize sz1(100, 50); CRect rect4(pt1, sz1); ASSERT(rect4 == rect2);
// by reference // by address
33
第一章 控制台应用程序
// from two points
CPoint rightBottom (100, 50); CRect rect5(pt1, rightBottom); ASSERT(rect5 == rect4);
CSize szEmpty(); CSize szPointA(10, 25);
SIZE sz; sz.cx = 10; sz.cy = 25; CSize szPointB(sz);
POINT pt; pt.x = 10; pt.y = 25;
CSize szPointC(pt);
CPoint ptObject(10, 25); CSize szPointD(ptObject);
DWORD dw = MAKELONG(10, 25); CSize szPointE(dw);
[提示] ASSERT 是一个诊断宏,其参数是一个逻辑表达式。求其参数值,如果为 零,向调试窗口输出一个诊断信息并终止程序执行,如果为非零,则该宏什么事 也不做。
表 1.1 是 CRect 的主要成员函数。
表 1.1 CRect 类主要成员函数 Width Height Size TopLeft BottomRight CenterPoint SetRect CopyRect EqualRect NormalizeRect OffsetRect
计算 CRect 的宽度 计算 CRect 的高度
计算 CRect 的大小,返回 CSize 对象 返回 CRect 左上角的 CPoint 对象 返回 CRect 右下角的 CPoint 对象 返回 CRect 的中心点 设置 CRect 的尺寸 拷贝参数 CRect 对象
判断 CRect 是否与给定矩形相等 使 CRect 的尺寸正常化 按给定量偏移 CRect
SubtractRect Operators operator = operator ==
矩形相减,尺寸可能不正常
CRect 的重载赋值运算符
CRect 重载两矩形是否相等运算符
34
C++程序设计实践教材 第一章 程序设计同步实验指导
operator != operator += operator -= operator &= operator |= operator + operator - operator & operator |
CRect 重载两矩形是否不相等运算符 添加偏移到 CRect 或扩展 CRect 减少 CRect 偏移或缩小 CRect CRect 取 CRect 与定矩形的交 CRect 取 CRect 与定矩形的并
添加偏移到 CRect 或扩展 CRect ,然后返回结果 CRect 对象 减少 CRect 偏移或缩小 CRect ,并返回结果 CRect 对象
创建 CRect 与给定矩形的公共部分(交集)并返回结果 CRect 对象 创建 CRect 与给定矩形的合并部分(并集)并返回结果 CRect 对象
4. 参考题 3 内容,编程使用 MFC 的简单数据类型,并设计数据测试这些类, 用数据形式(而不是图形)输出测试结果(如输出点的坐标,输出矩形的左上角 坐标等)。包含 afxwin.h 头文件。(可选)
在控制台或基于 Win32 的应用程序中使用 MFC 类,应在创建工程后,为工 程设置使用 MFC,方法如下:
(1)选择 Project|Settings?菜单,打开 Project Settings 对话框,在 General 页面, Microsoft foundation Classes 列表框中,将缺省值 Not Using MFC 改为 Use MFC in a Static Library 或 Use MFC in a Shared DLL,如图 1.9;
图 1.9 为 Win32 或 Console Application 设置使用 MFC 类
(2)重新 Build 应用程序并执行。
5. 改善分数类,将比较、加、减、乘、除改为重载的运算符。
实验十三 数组与多维数组
一、实验目的
35
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C++程序设计实践样例(7)在线全文阅读。
相关推荐: