版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、例1:设计一个时钟类,完成时间的设置和显示功能;例2:一圆形游泳池,现在需在其周围建一圆形过道,并在其四周围上栅栏。栅栏价格为35元/米,过道价格为20元/平方米。过道宽度为3米,游泳池半径由键盘输入。要求编程计算并输出过道和栅栏的造价。,例1:#include class Clockpublic: void SetTime(int NewH=0,int NewM=0,int NewS=0); void ShowTime();private: int Hour,Minute,Second;void Clock:SetTime(int NewH,int NewM,int NewS) Hour=N
2、ewH;Minute=NewM;Second=NewS;inline void Clock:ShowTime() coutHour“:”Minute“:”Secondendl;,void main() Clock myClock; cout“First time set and output:”endl; myClock.SetTime(); myClock.ShowTime(); cout“Second time set and output:”endl; myClock.SetTime(8,30,30); myClock.ShowTime();,例2:#include const floa
3、t PI=(float)3.14159;const float FencePrice=35;const float ConcretePrice=20;class Cirlepublic: void SetR(float r); float Circumference(); float Area();private: float radius; void Cirle:SetR(float r)radius=r; float Circle:Circumference()return 2*PI*radius; float Circle:Area()return PI*radius*radius;,v
4、oid main() float radius,FenceCost,ConcreteCost; coutradius; Circle Pool,PoolRim; Pool.SetR(radius); PoolRim.SetR(radius+3); FenceCost=PoolRim.Circumference()*FencePrice; cout“Fencing Cost is $”FenceCostendl; ConcreteCost=(PoolRim.Area()-Pool.Area()*ConcretePrice; cout“Concrete Cost is $”ConcreteCost
5、enel;,例3:定义一个线性表类,#define elem char const int DefautListSize=100; class alist private: int maxSize, listSize; elem *listArray; public: alist(int size=DefaultListSize); alist(); void create(int); void insert(const elem,alist:alist(int size) maxSize=size; listSize=0; listArray=new elemmaxSize; ,alist:
6、alist( ) delete listArray;,void alist: create(int n) listSize=n; for (int k=0;klistArrayk; ,void alist: insert(const elemj-) listArrayj+1=listArrayj; listArrayi=x; listSize+; ,elem alist: del(int i) int j; if (i=listSize)|(i0) cout(“error”); else for(j=i+1;jlistSize;j+) listArrayj-1=listArrayj; list
7、Size-; ,习题: 设计一个链表类,能完成常见的初始化、建立链表、插入、删除、定位以及输出运算。,7.4 构造函数与析构函数,1.简单的构造函数和析构函数,(1)功能,构造函数便是对象用来设定本身起始值的函数;析构函数与构造函数对应,其作用是用来释放新定义一个对象时,由构造函数向系统所要求的存储空间。,(2)工作过程:自动调用,(3)使用说明,i. 构造函数和析构函数的函数名必须与该类同名,析构函数名前方还需要加一个号。,ii. 构造函数和析构函数无返回值,不可说明返回值类型,iii. 构造函数可带参数,可以重载;析构函数不可以有任何参数,一个类只允许有一个唯一的析构函数,不可重载。,iv
8、. 当一个类已经定义好后,以后只要以该类去定义一对象,则构造函数就会自动被调用(由编译器);当对象离开其有效范围时,便会自动调用析构函数。,v. 构造函数不可显示调用,析构函数可显示调用。,vi. 构造函数和析构函数均可系统缺省。,2.参数化的构造函数与重载构造函数,例如: class x public: x(); x(int); x(int,char); x(float,char); ;,void f() x a; x b(1); x c(1,c); x d(2.3,d); ,实现对不同对象的不同初始化,3.缺省参数的构造函数,C+函数可默认参数初值,即缺省参数。,void f(int k=
9、1) 调用: f(10); f();,什么时候使用缺省参数? 当需要多次调用一函数,并发现要多次给函数传递某个同样的参数时,多要考虑用缺省变元表。,设定缺省参数的位置:,(1)参数默认值的设定不可以同时出现在函数原型与函数定义中。一般在函数原型中设定,若无函数原型,才在定义中说明。,(2)如果一个函数中只有某些变元是缺省变元,则必须要将那些缺省变元放在变量表中的最右边。,例如: void f(int i,int j=10,int k);/error void f(int i,int k,int j=10);,构造函数带缺省参数时,可以传递参数也可以不传递参数,但重载函数使用缺省参数时,谨防二义
10、性。,例如: class x public: x(); x(int i=0); ;,void f() x a(10); x b; /二义性 ,4.拷贝构造函数,将自己所在类的引用作为参数,称为拷贝构造函数,一般形式: classname(const classname A b(a); public: A(int); A(const A,说明:,(1)当创建一个新对象并用一个已知对象对其初始化时,调用拷贝构造函数。,(2)系统隐含有一个拷贝构造函数,它将参数代表的对象逐域拷贝到新创建的对象中。,5. 构造函数的设计及对象的初始化,(1)构造函数的设计,构造函数可用两种方法把值赋给其成员,方法一:
11、在函数体里进行成员变量的赋值,class x int a,b; public: x(int i,int j)a=i;b=j; ;,方法二:使用初始值表,class x int a,b; public: x(int i,int j):a(i),b(j) ;,说明:,(i)初始值表必须位于构造函数的参数行后与其实际定义体之间,中间用:连接。,(ii)初始值表的格式:数据成员名(数值),(iii)初始值表只能出现在构造函数的定义部分而非原型位置。,class x int a,b; public: x(int i,int j);/原型 ; x:x(int i,int j):a(i),b(j) /定义,
12、(iv)当在一个类中使用const修饰数据成员或声明了引用类型的数据成员时,这些数据成员必须在该类的对象建立的同时进行初始化,这种初始化也是通过初始值表进行的。,例如: class A const int a; int A:A(int i,int A b(a); public: A(int); A(const A,方法二:赋值表达式的方法,例如: class AA a=1; A b=a; public: A(int); A(const A,6.动态存储,C语言中,用malloc()和free()函数动态分配和释放存储空间,C+中,用两个运算符new和delete提供动态分配和释放存储空间的功能
13、,new运算符的一般形式: pointer_var=new var_type; p=new int; p=(int*)malloc(sizeof(int);,delete运算符的一般形式: delete pointer_var; delete p;,特点: (1)new可以自动计算所要分配内存类型的大小,而不必使用sizeof()来计算所需要的字节数。,(2)new可以自动返回正确的指针类型,不必对返回指针进行类型转换。,(3)使用new可以为数组动态分配内存空间,这时需要在类型名后面缀上数组大小。,如:int *p=new int10;,int a; int a10; int *q;,(4)
14、new可在为简单变量分配内存空间的同时,进行初始化。 如:int *p=new int(99);,(5)释放动态分配的数组存储区时,可使用如下格式: delete p;,(6)使用new动态分配内存时,如果没有足够的内存满足分配要求,new将返回空指针(NULL)。因此通常要对内存的动态分配是否成功进行检查。,例: p=new int; if (!p) cout “allocation failuren”; return 1; 注意:new和delete一般配对使用,注意:对象赋值及初始化中的指针悬挂问题,class stringvoid main() unsigned len; char *string;string One(“Beijing”); public:string Two=One; string(cons
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心血管系统疾病护理
- 2026年大学英语b级测试题及答案
- 2026年沙坪小屋测试题及答案
- 2026年新概念时态测试题及答案
- 投资X可持续发展战略论文
- 工程进度款结算专项方案
- 医院隔离技术规范
- 切片资源预留策略论文
- 服务案例培训考试题及答案
- 2026光纤布线系统在数据中心能效优化中的作用研究报告
- 工程造价咨询服务投标方案(技术方案)
- 修建祠堂合同模板
- 《交通监控系统》课件
- 2024年04月国家艺术基金管理中心应届毕业生招考聘用笔试历年典型考题及考点研判与答案解析
- 2024河北出版传媒集团招聘91人公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 小升初英语词汇表(含1600个必备单词)+英语冲刺专项训练.情景对话+155个必考短语(必背)
- 等静压石墨行业分析
- 27.2.2相似三角形的性质教学设计人教版九年级数学下册
- 《商务馈赠礼仪》课件
- 生活中的趣味化学
- QC活动之降低投诉率
评论
0/150
提交评论