版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精品文档第五章C+程序的结构典型案例【案例5-1】局部作用域的效果#i nclude using n amespace std;void fun()变量num将在每次进入函数fun()时进行初始化int num = 10;cout num n;num+;/这个语句没有持续效果int main()for(int i=0; i 3; i+)fun ();return 0;【案例5-2】屏蔽效应一一作用域效果导致的名称隐藏#i nclude using n amespace std;int main()int i = 10, j = 30;if(j 0)int i;/内部的i将隐藏或屏蔽外层的ii
2、= j / 2;cout inner variable i: i n;cout outer variable i: i n; return 0;【案例5-3】筛选偶数一一文件作用域变量#i nclude using n amespace std;in t cou nt;/这是一个全局变量void fun c1()/可以访问全局变量countvoid func2();cout co un t: coun t n;fun c2();void fun c2()int cou nt;/这是一个局部变量for(co un t=0; coun t2; coun t+) cout *;int main()v
3、oid fun c1();void func2();int i;/这是一个局部变量for(i=0; i10; i+)count = i+;fun c1(); return 0;【案例5-4】求数据序列的平均值static局部变量的持续效果#i nclude using n amespace std;int Average nt i)static int sum = 0, count = 0;声明静态局部变量,具有全局寿命,局部可见sum = sum + i;coun t+;retur n sum/c ount;int main()int num;/局部变量,具有动态生存期docout num;
4、if(num != -1)cout Running average is: Average( nu m);cout -1);return 0; 【案例5-5】求数据序列的平均值 static全局变量的应用#i nclude using n amespace std;int Average nt i);void reset();int main()int num;/局部变量,具有动态生存期docout num;if(num = -2)reset();con ti nue;if(num != -1)cout Running average is: Average( nu m);cout en dl
5、; while( num != -1);return 0;static int sum = 0, cou nt = 0;/静态全局变量,具有静态生存期,全局可见int Average(i nt i)sum = sum + i;coun t+; retur n sum/co unt;void reset()sum = 0; count = 0;【案例5-6】时钟类具有静态生存期的全局变量和全局对象#in clude using n amespace std;int h=O,m=O,s=O;声明全局变量,具有静态生存期class Clockpublic:Clock();void SetTime(i
6、 nt NewH, i nt NewM, i nt NewS);/ 三个形参均具有函数原型作用域void ShowTime();Clock()private:int Hour,M inu te,Sec ond;Clock:Clock()Hour=h; Mi nute=m; Seco nd=s;使用全局变量初始化void Clock:SetTime(int NewH, int NewM, int NewS)Hour=NewH; Mi nute=NewM; Seco nd=NewS;void Clock:ShowTime()coutHour: Minu te:Sec on de ndl;Clock
7、 globClock;声明对象globClock,具有静态生存期,文件作用域int main()coutInitial time output:endl;/引用具有文件作用域的对象globClock :globClock.ShowTime();对象的成员函数具有类作用域globClock.SetTime(10,20,30);/ 将时间设置为 10:20:30调用拷贝构造函数,以globClock为初始值Clock myClock(globClock);声明具有块作用域的对象myClockcoutSetted time output:e ndl;myClock.ShowTime();/引用具有块
8、作用域的对象myClockreturn 0;【案例5-7】实现数据共享一一公有静态数据成员#i nclude using n amespace std;class PubClasspublic:static int num;/公有静态数据成员的声明void show num() cout The num is: num en dl; ;int PubClass:num;在类外定义 numint main()PubClass a, b;numPubClass: num = 1000;通过类名访问静态成员a. show num();b. show num();a. num = 2000;通过对象访
9、问静态成员 numa. show num();b. show num();return 0;【案例5-8】实现数据共享一一私有型静态数据成员#i nclude using n amespace std;class PriClassstatic int num;/私有型静态成员public:void set nu m(i nt i) num = i; ;void show num() cout The num is: num n; ;int PriClass:num;在类外定义 numint main()PriClass a, b;a.show num();b.show num();a.setn
10、um(1000);/设置静态成员 num 为 1000a.show num();b.show num();return 0;【案例5-9】实现函数共享一一静态函数成员#i nclude using n amespace std;class Fun Classstatic in t cou nt;/静态数据成员声明public:Fun Class() coun t+;cout Con struct ing object co unt en dl;Fun Class() cout Destro ying object count en dl;coun t-; static int GetCou n
11、t() return cou nt; 静态函数成员;int Fu nClass:cou nt;静态数据成员定义int main()Fun Class a, b, c;cout From Class, there are now Fun Class:GetCo un t() inexiste nce.n;cout From Object, there are now a.GetCo un t() in existe nce.n; return 0;【案例5-10】求最小公因子一一友元函数的访问类的私有成员#i nclude using n amespace std;class FriF un C
12、lassint a, b;public:FriF un Class(i nt i, i nt j) a=i; b=j; friend int FriFu n(FriFu nClass x);友元成员函数;int FriFun(FriFunClass x)注意:FriFun()不是任何类的成员函数/由于函数FriFun()是类FriFunClass的友元函数,所以它不能直接访问a和bint max = x.a x.b ? x.a : x.b;for(i nt i=2; i = max; i+)if(x.a%i)=0 & (x.b%i)=0)return i;return 0;int main()
13、FriFu nClass n (10, 20);声明类对象if(FriFu n(n)cout Com mon denomin ator is FriF un(n) n;else cout No com mon denomin ator.n; return 0;【案例5-11】判断圆柱体和立方体的颜色是否相同一一多个类共享友元函数#i nclude using n amespace std;class Cylinder;/前向引用声明enum Colors red, gree n, yellow ;定义颜色枚举类型class CubeColors color;public:Cube(Colors
14、 c) color = c; friend bool TestSame(Cube x, Cylinder y);声明为 Cube 的友元函数;class Cyli nderColors color;public:Cyli nder(Colors c) color= c; friend bool TestSame(Cube x, Cylinder y);声明为 Cylinder 的友元函数;bool TestSame(Cube x, Cyli nder y)if(x.color = y.color)return true;else return false;int main()Cube cube
15、1(red), cube2(yellow);Cyli nder cyl(yellow);声明对象并初始化if(TestSame(cube1, cyl)cout The color of cube1 and cyl are the same.n;elsecout The color of cubel and cyl are differe nt.n; if(TestSame(cube2, cyl)cout The color of cube2 and cyl are the same. n; elsecout The color of cube2 and cyl are differe nt.n
16、; return 0;【案例5-12】计算2个三角形之和一一友元函数的应用#i nclude #in clude using n amespace std;class Trigdouble x,y,z;double area() double d=(x+y+z)/2; return sqrt(d* (d-x)* (d-y)* (d-z) ; public :Trig (int i,i nt j,i nt k) x=i;y=j;z=k; int isTria ngle()判断是否构成三角形if (x+yz & x+zy & y+zx)return 1 ;elsereturn 0;frie nd
17、double twoarea(Trig tl,Trig t2)声明友元函数retur n tl.area()+t2.area();int main()Trig tl (3,5,7) ,t2 (8, 7,12);if (tl.isTriangle() & t2.isTriangle()cout Total area of two Trian gles: twoarea(tl,t2) en dl;elsecout Ca nnot form a Trian gle en dl;return 0;【案例5-13】数据的单向传递 常引用作函数形参#i nclude using n amespace st
18、d;/常引用作形参,在函数中不能更新 z所引用的对象,因此对应的实参不会被破 坏。void fun (i nt x, int& y, const int& z)x += z;y += z;cout x = x , y = y , z = z en dl;int main()int a = 20, b = 30, c = 40;cout a = a , b = b , c = c en dl;fun (a,b,c);cout a = a , b = b , c = c en dl;fun (2*a-3,b,c);cout a = a , b = b , c = c en dl; return 0
19、;【案例5-14】成员函数的选择调用一一常成员函数#in cludeusing n amespace std;class ZRFpublic:ZRF(int Z1, int Z2)ZRF1=Z1;ZRF2=Z2;void disp();void disp() const;/常成员函数声明private:int ZRF1,ZRF2;void ZRF:disp()coutZRF1:ZRF2e ndl;void ZRF:disp() con st常成员函数定义coutZRF1:ZRF2e ndl;精品文档int main()ZRF a(2,3);a. disp();const ZRF b(10,20
20、);b. disp();return 0;调用 void disp()调用 void disp() const【案例5-15】计算圆周长一一不带参数的宏定义#in clude using n amespace std;宏名PI为符号常量/宏名n将用a来替换/宏名LENGTH将用2*PI*n来替换/int n=1;替换为 int a=1;#define PI 3.14159#defi ne n a#defi ne LENGTH 2*PI*n int main()/替换为int n=1;coutvvLENGTH=vLENGTHvve ndl;coutvvLENGTH=v2*3.14159*avve
21、 ndl;return 0;【案例5-16】求三角形面积一一带参数的宏函数#in clude#in clude using n amespace std;#defi ne s(a,b,c) (a+b+c)/2/ 带参数的宏#define area(a,b,c) sqrt(s(a,b,c)*(s(a,b,c)-a)*(s(a,b,c)-b)*(s(a,b,c)-c)/带参数的宏int main()float x=4,y=5,z=6;coutThe area is :area(x,y,z)e ndl;/ 编译时发生宏替换coutThe area is :area(5,4,3)e ndl;/ 编译时
22、发生宏替换return 0;【案例5-17】求最小值一一带参数的宏函数和内联函数#in clude using n amespace std;/内联函数in li ne min (i nt x,i nt y,i nt z ) int min=x;if(ymi n) min=y; if(z min) min=z;return mi n;#defi ne MIN(a,b) (a)v(b)?(a):(b)宏函数#defi ne mi n(a,b,c) MIN(a,MIN(c,b)宏函数int main()调用内联函数调用宏函数coutThe min value is: (min)( 4,5,3.0)
23、e ndl; coutThe min value is:min(5.0,4,3.0)endl; return 0;【案例5-18】程序调试阶段的条件编译#ifndef-#else-#endif#in cludeusing n amespace std;#defi ne RUN语句1:在调试程序时使之成为注释行int main()int x=1,y=2,z=3;#ifndef RUN语句2:本行为条件编译命令coutx=x ,y=vvyvv,z=z;语句 3 :在调试程序时需要输出信息#endif语句4:本行为条件编译命令coutx*y*z=x*y*ze ndl;return 0;【案例5-19】综合案例 统计银行存款问题#in elude II前向引用声明/前向引用声明 声明中国银行类using n amespace std; class BBa nk;class GBank;class CBankint bala nee;public :CBa nk() bala nce=O; II 默认构造函数CBa nk(i nt b) bala nce=b; II 构造函数void getbala nce() cout bala nee
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 停车场扩建钢结构隔层施工合同
- 员工反馈与沟通渠道
- 物流运输可靠性规范
- 水库清淤治理施工合同
- 建筑门窗施工合同:教育设施建设
- 户外用品质量奖评定流程
- 团队协作升级计件奖罚新实践
- 旧城改造工程合同进度跟踪
- 农业计量管理准则
- 云云云金融服务期协议
- 农业信息技术 chapter5 地理信息系统
- 浅谈新形势下加强企业税务管理的对策研究
- 部编版六年级上语文阅读技巧及解答
- 必看!设备管理必须要懂的一、二、三、四、五
- 空冷岛专题(控制方案、谐波及变压器容量选择)
- 结合子的机械加工工艺规程及铣槽的夹具设计
- 林武樟 完整阳宅讲义 笔记版[方案]
- 液氧汽化站安全技术操作规程2018-07.docx
- 《会滚的汽车》ppt课件
- 督学与校长应彼此“亦师亦友”
- 了不起的盖茨比经典台词
评论
0/150
提交评论