ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:61.62KB ,
资源ID:4952035      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4952035.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《C++程序设计教程》第二版 第10章 类和对象例子.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

《C++程序设计教程》第二版 第10章 类和对象例子.docx

1、C+程序设计教程第二版 第10章 类和对象例子例10.4 定义并测试长方形类CRect,长方形是由左上角坐标(left, top)和右下角坐标(right, bottom)组成。#include #include class CRect /定义长方形类 private: int left, top, right, bottom ; public: void setcoord(int, int, int, int); void getcoord(int *L, int *T, int *R, int *B) /注意:形参为指针变量 *L = left; *T = top; *R = right;

2、 *B = bottom; void print(void) coutArea = ; coutabs(rightleft)*abs(bottomtop)endl; ;void CRect:setcoord(int L, int T, int R, int B) left=L; top=T; right=R; bottom=B; void main(void)CRect r, rr; int a, b, c, d ; r.setcoord(100, 300, 200, 50); r.getcoord( &a, &b, &c, &d ); /用变量的指针做参数,带回多个结果 cout left=

3、 a endl; cout top= b endl; cout right= c endl; cout bottom= d endl; r.print( ); rr = r; /对象可整体赋值 rr.print( );运行结果:left=100 top=300right=200 bottom=50Area = 25000Area = 25000返回ppt讲稿例10.5 定义日期类,利用构造函数初始化数据成员。程序放在头文件date.h中,如下:#include class Date int Year, Month, Day;public: Date( ) /重载构造函数 1 Year=2010

4、; Month=5; Day=1; Date(int y) /重载构造函数 2 Year=y; Month=5; Day=1; Date(int y, int m) /重载构造函数 3 Year=y; Month=m; Day=1; Date(int y, int m, int d) /重载构造函数 4 Year=y; Month=m; Day=d; void ShowDate( ) cout Year.Month.Dayendl; ;主函数源文件为Li1005.cpp,内容如下:#include date.hvoid main( ) Date d1; /自动调用构造函数 1Date d2(2

5、010); /自动调用构造函数 2Date d3(2010, 10); /自动调用构造函数 3Date d4(2010, 10, 6); /自动调用构造函数 4 d1.ShowDate( ); d2.ShowDate( ); d3.ShowDate( ); d4.ShowDate( );运行结果是:2010.5.12010.5.12010.10.12010.10.6当然我们可以定义带缺省值的构造函数,将上述构造函数简化,下述程序的功能与上述程序相当:#include class Date int Year, Month, Day;public:/带参数缺省值的构造函数 Date(int y=2

6、010, int m=5, int d=1) Year=y; Month=m; Day=d; void ShowDate( ) cout Year.Month.Dayendl; ;void main( ) Date d1, d2(2010), d3(2010, 10), d4(2010, 10, 6); d1.ShowDate( ); d2.ShowDate( ); d3.ShowDate( ); d4.ShowDate( );运行结果与上例一样。返回ppt讲稿例10.6 定义学生类,利用构造函数初始化数据成员,利用析构函数做清理工作。#include#includeclass Student

7、 char Num10; /学号,注意:用数组实现 char *Name; /姓名,注意:用指针实现 int Score; /成绩public: Student(char *nump, char *namep, int score) if(nump) /在构造函数中, /不需要动态申请Num成员的空间 strcpy(Num, nump); else strcpy(Num, ); if(namep) /在构造函数中, /需动态申请Name成员的空间 Name=new charstrlen(namep)+1; strcpy(Name, namep); else Name=0; Score=scor

8、e; coutConstructor Called!n; Student( ) /在析构函数中, /需释放Name成员的空间 if(Name) /为什么需要判断?delete Name; coutDesturctor Called!n; void Show( ) cout Num endl; cout Name endl; cout Score endl; ;void main( ) Student a(040120518, George, 80); a.Show( );此程序运行结果是:Constructor Called! /调用构造函数时的输出040120518George80Destu

9、rctor Called! /调用析构函数时的输出返回ppt讲稿例10.7 调用构造函数和析构函数的时机 #include class Date int Year, Month, Day;public: Date(int y=2002, int m=1, int d=1) Year=y; Month=m; Day=d; coutConstructor: ; ShowDate( ); /目的? void ShowDate( ) cout Year.Month.Dayendl; Date( ) coutDestructor: ; ShowDate( ); /目的? ;Date d4(2008, 4

10、, 4); /全局对象(静态的)void fun( ) cout 进入 fun( )函数!n; static Date d2(2008, 2, 2); /局部静态对象 Date d3(2008, 3, 3); /局部动态对象 cout 退出 fun( )函数!n;void main( ) cout 进入 main( )函数!n; Date d1(2008, 1, 1); /局部动态对象 fun( ); fun( ); cout 退出 main( )函数!n;此程序运行结果是:Constructor: 2008.4.4 /调用构造函数,产生d4对象进入 main( )函数!Constructor

11、: 2008.1.1 / 调用构造函数,产生d1对象进入 fun( )函数! / 第1次进入fun( )函数,产生下述 d2, d3对象Constructor: 2008.2.2 Constructor: 2008.3.3退出 fun( )函数!/ 退出fun( )函数,撤消d3对象,不撤消d2对象Destructor: 2008.3.3 进入 fun( )函数!/ 第2次进入fun( )函数,再次产生d3对象Constructor: 2008.3.3 退出 fun( )函数!Destructor: 2008.3.3 / 退出fun( )函数,撤消d3对象退出 main( )函数! / 退出m

12、ain ( )函数,撤消d1, d2, d4对象Destructor: 2008.1.1 Destructor: 2008.2.2Destructor: 2008.4.4返回ppt讲稿例10.9 定义一个“平面坐标点”类,测试拷贝构造函数的调用。/头文件 point.hclass Pointint x, y; public: Point(int a=0, int b=0) /缺省构造函数 x=a; y=b; Point(Point &p); /拷贝构造函数原型说明 Point( ) /析构函数 coutx,y Destructor Called.n ; void Show( ) coutPoi

13、nt: x,yendl; int Getx( ) return x; int Gety( ) return y; ;Point:Point(Point &p) /定义拷贝构造函数 x=p.x; y=p.y; coutx,y Copy-initialization Constructor Called.n;/文件 Li1009.cpp#include #include point.hvoid main( ) Point p1(6, 8), p2(4, 7); Point p3(p1); / A调用拷贝构造函数Point p4=p2; / B调用拷贝构造函数 p1.Show( ); p3.Show

14、( ); p2.Show( ); p4.Show( ); 此程序运行结果是:6, 8 Copy-initialization Constructor Called.4, 7 Copy-initialization Constructor Called.Point: 6, 8Point: 6, 8Point: 4, 7Point: 4, 74, 7 Destructor Called. / 撤销 P46, 8 Destructor Called. / 撤销 P34, 7 Destructor Called. / 撤销 P26, 8 Destructor Called. / 撤销 P1析构函数与构

15、造函数的调用顺序相反返回ppt讲稿例10.10 不定义拷贝构造函数时,运行出错。/文件 Li1010.cpp#include#includeclass Student char *Name; /姓名,注意:用指针实现int Age; /年龄public: Student(char *namep, int age) /构造函数 Age=age; if(namep) /在构造函数中,需动态申请空间 Name=new charstrlen(namep)+1; strcpy(Name, namep); else Name=NULL; Student( )/因在构造函数中动态申请了空间, /则在析构函数

16、中,需释放空间 if(Name) delete Name; void Show( ) cout Name , Age endl; ;void main( ) Student a(George, 20); Student b=a; / A 此程序运行时出错,原因是: 没有定义类的拷贝构造函数。系统自动产生的拷贝构造函数如下:Student:Student(const Student &s) Name = s.Name; / 注意:地址值直接赋值 Age = s.Age; 正确的做法是,定义如下拷贝构造函数:Student:Student(const Student &s) Age=s.Age;

17、if(s.Name) Name = new charstrlen(s.Name)+1; /C strcpy(Name, s.Name); else Name=NULL;返回ppt讲稿例10.11 在本例中,使用例10.9中“平面坐标点”类的头文件point.h,测试用对象做函数参数及函数返回值时拷贝构造函数的使用。#include point.h /普通函数,不是类的成员函数Point move(Point p, int xoffset, int yoffset) int x = p.Getx( )+xoffset, y = p.Gety( )+yoffset;Point p=p1 /参数传递

18、时Point 内存临时对象=t。/返回对象时 Point t(x, y); return t;void main( ) Point p1(6, 8), p2; p2=move(p1, 2, 4);此程序运行结果是:6, 8 Copy-initialization Constructor Called. /A8, 12 Copy-initialization Constructor Called. / B8, 12 Destructor Called. / 撤消对象t6, 8 Destructor Called. / 撤消对象p8, 12 Destructor Called. / 撤消内存临时对

19、象8, 12 Destructor Called. / 撤消对象p26, 8 Destructor Called. / 撤消对象p1返回ppt讲稿例10.13 利用构造函数完成类型转换/文件 Li1013.cpp#include class Complexdouble Real, Image;public: Complex(double x=0, double y=0) Real=x; Image=y; Show( ); cout 调用了构造函数n; Complex( ) Show( ); cout 调用了析构函数n; void Show( ) cout(Real,Image); ;void

20、main( ) Complex c1(3, 5), c2; /A c1 = 8.0; /B 等价于c1 = Complex(8.0); c2 = Complex(9.0, 9.0); /C此程序运行结果是:(3, 5)调用了构造函数 /在A行创建c1对象时,/调用构造函数(0, 0)调用了构造函数 /在A行创建c2对象时,/调用构造函数(8, 0)调用了构造函数(8, 0)调用了析构函数(9, 9)调用了构造函数(9, 9)调用了析构函数(9, 9)调用了析构函数 /在程序结束,/撤消c2对象时,调用析构函数(8, 0)调用了析构函数 /在程序结束,/撤消c1对象时,调用析构函数返回ppt讲稿

21、例10.15 处理线性表 #include class ListClass int *ListPtr; / 指向线性表的指针 int nLen; / 线性表的长度 int nElem; / 线性表中当前元素的个数public: ListClass(int n=10) / 构造函数,初始化线性表, 最大长度的缺省值为10 nElem=0; nLen=n; if(n) ListPtr = new intn; else ListPtr=0; ListClass(void) / 析构函数 delete nLen ListPtr; int Elem(int); /重载函数,在线性表尾增加一个元素 int

22、 &Elem(unsigned n) / 重载函数,返回线性表中第n个元素的引用 return ListPtrn; int Elem(void) /重载函数, 返回线性表中当前元素的个数 return nElem; int Len(void) / 返回线性表的长度 return nLen; int GetElem(int i) / 返回线性表第i个元素的值 if(i=0) & (inElem) return ListPtri; else cout 下标越界 endl; return(1); void Print(void); / 输出线性表中的所有元素,在类体外实现;int ListClass

23、:Elem(int elem) / 重载函数,在线性表尾增加一个元素 if(nElem=nLen) / 线性表已满 int *newptr; newptr = new intnLen+10; / A行,申请新线性表空间 for(int i=0; inElem; i+) newptri = ListPtri; / 将原线性表中的元素拷贝到新线性表中 deletenLenListPtr; / 释放原线性表空间 nLen += 10; ListPtr = newptr; / 让指针指向新线性表空间 ListPtrnElem+ = elem; / 添加元素 return(nElem); / 返回新线性

24、表的元素个数void ListClass:Print(void) / 输出线性表中全体元素 for(int i=0; inElem; i+) cout ListPtri t; cout endl;void main(void) ListClass list(6); for(int i=0; i5; i+) list.Elem(i); / 调用重载函数 cout线性表的长度为:list.Len( )endl; cout线性表的元素个数为:; coutlist.Elem( )endl; / 调用重载函数 cout线性表的元素为:; list.Print( ); list.Elem(3u) = 10

25、0; / 调用重载函数 cout线性表下标为3的元素的值为: ; coutlist.Elem(3u)endl; / 调用重载函数 list.Elem(20); / 调用重载函数 list.Elem(200); / 调用重载函数 cout现在线性表的长度为:list.Len( )endl; cout 现在线性表中的元素个数为: ; cout list.Elem( )endl; / 调用重载函数 cout线性表的元素为:; list.Print( ); cout 线性表的最后一个元素为: ; coutlist.GetElem(list.Elem( )1)endl; / 调用重载函数程序的运行结果:线性表的长度为:6线性表的元素个数为:5线性表的元素为:0 1 2 3 4 线性表下标为3的元素的值为: 100现在线性表的长度为:16现在线性表中的元素个数为: 7线性表的元素为:0 1 2 100 4 20 200 线性表的最后一个元素为: 200返回ppt讲稿例10.16 初始化对象成员。#include #include class Point /定义“点”类 int x, y;public: Point(int a=0, int b=0) x=a; y=b; coutx,y 构造 Pointn; int Get

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2