C++程序的结构典型案例.docx
- 文档编号:25499463
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:20
- 大小:19.01KB
C++程序的结构典型案例.docx
《C++程序的结构典型案例.docx》由会员分享,可在线阅读,更多相关《C++程序的结构典型案例.docx(20页珍藏版)》请在冰豆网上搜索。
C++程序的结构典型案例
第五章C++程序的结构典型案例
【案例5-1】局部作用域的效果
#include
usingnamespacestd;
voidfun() //变量num将在每次进入函数fun()时进行初始化
{
intnum=10;
cout< num++; //这个语句没有持续效果 } intmain() { for(inti=0;i<3;i++) fun(); return0; } 【案例5-2】屏蔽效应——作用域效果导致的名称隐藏 #include usingnamespacestd; intmain() { inti=10,j=30; if(j>0) { inti; //内部的i将隐藏或屏蔽外层的i i=j/2; cout<<"innervariablei: "< } cout<<"outervariablei: "< return0; } 【案例5-3】筛选偶数——文件作用域变量 #include usingnamespacestd; intcount; //这是一个全局变量 voidfunc1() { voidfunc2(); cout<<"count: "< func2(); } voidfunc2() { intcount; //这是一个局部变量 for(count=0;count<2;count++) cout<<'*'; } intmain() { voidfunc1(); voidfunc2(); inti; //这是一个局部变量 for(i=0;i<10;i++) { count=i++; func1(); } return0; } 【案例5-4】求数据序列的平均值——static局部变量的持续效果 #include usingnamespacestd; intAverage(inti) { staticintsum=0,count=0; //声明静态局部变量,具有全局寿命,局部可见 sum=sum+i; count++; returnsum/count; } intmain() { intnum; //局部变量,具有动态生存期 do { cout<<"Enternumbers(-1toquit): "; cin>>num; if(num! =-1) cout<<"Runningaverageis: "< cout< }while(num>-1); return0; } 【案例5-5】求数据序列的平均值——static全局变量的应用 #include usingnamespacestd; intAverage(inti); voidreset(); intmain() { intnum; //局部变量,具有动态生存期 do { cout<<"Enternumbers(-1toquit,-2toreset): "; cin>>num; if(num==-2) { reset(); continue; } if(num! =-1) cout<<"Runningaverageis: "< cout< }while(num! =-1); return0; } staticintsum=0,count=0; //静态全局变量,具有静态生存期,全局可见 intAverage(inti) { sum=sum+i; count++; returnsum/count; } voidreset() { sum=0;count=0; } 【案例5-6】时钟类——具有静态生存期的全局变量和全局对象 #include usingnamespacestd; inth=0,m=0,s=0; //声明全局变量,具有静态生存期 classClock { public: Clock(); voidSetTime(intNewH,intNewM,intNewS); //三个形参均具有函数原型作用域 voidShowTime(); ~Clock(){} private: intHour,Minute,Second; }; Clock: : Clock() { Hour=h;Minute=m;Second=s; //使用全局变量初始化 } voidClock: : SetTime(intNewH,intNewM,intNewS) { Hour=NewH; Minute=NewM; Second=NewS; } voidClock: : ShowTime() { cout< "< "< } ClockglobClock; //声明对象globClock,具有静态生存期,文件作用域 intmain() { cout<<"Initialtimeoutput: "< //引用具有文件作用域的对象globClock: globClock.ShowTime(); //对象的成员函数具有类作用域 globClock.SetTime(10,20,30); //将时间设置为10: 20: 30 //调用拷贝构造函数,以globClock为初始值 ClockmyClock(globClock); //声明具有块作用域的对象myClock cout<<"Settedtimeoutput: "< myClock.ShowTime(); //引用具有块作用域的对象myClock return0; } 【案例5-7】实现数据共享——公有静态数据成员 #include usingnamespacestd; classPubClass { public: staticintnum; //公有静态数据成员的声明 voidshownum(){cout<<"Thenumis: "< }; intPubClass: : num; //在类外定义num intmain() { PubClassa,b; PubClass: : num=1000; //通过类名访问静态成员num a.shownum(); b.shownum(); a.num=2000; //通过对象访问静态成员num a.shownum(); b.shownum(); return0; } 【案例5-8】实现数据共享——私有型静态数据成员 #include usingnamespacestd; classPriClass { staticintnum; //私有型静态成员 public: voidsetnum(inti){num=i;}; voidshownum(){cout<<"Thenumis: "< }; intPriClass: : num; //在类外定义num intmain() { PriClassa,b; a.shownum(); b.shownum(); a.setnum(1000); //设置静态成员num为1000 a.shownum(); b.shownum(); return0; } 【案例5-9】实现函数共享——静态函数成员 #include usingnamespacestd; classFunClass { staticintcount; //静态数据成员声明 public: FunClass(){count++; cout<<"Constructingobject"< ~FunClass(){cout<<"Destroyingobject"< staticintGetCount(){returncount;} //静态函数成员 }; intFunClass: : count; //静态数据成员定义 intmain() { FunClassa,b,c; cout<<"FromClass,therearenow"< : GetCount()<<"inexistence.\n"; cout<<"FromObject,therearenow"< return0; } 【案例5-10】求最小公因子——友元函数的访问类的私有成员 #include usingnamespacestd; classFriFunClass { inta,b; public: FriFunClass(inti,intj){a=i;b=j;} friendintFriFun(FriFunClassx); //友元成员函数 }; intFriFun(FriFunClassx) //注意: FriFun()不是任何类的成员函数 { //由于函数FriFun()是类FriFunClass的友元函数,所以它不能直接访问a和b intmax=x.a x.a: x.b; for(inti=2;i<=max;i++) if((x.a%i)==0&&(x.b%i)==0) returni; return0; } intmain() { FriFunClassn(10,20); //声明类对象 if(FriFun(n)) cout<<"Commondenominatoris"< else cout<<"Nocommondenominator.\n"; return0; } 【案例5-11】判断圆柱体和立方体的颜色是否相同——多个类共享友元函数 #include usingnamespacestd; classCylinder; //前向引用声明 enumColors{red,green,yellow}; //定义颜色枚举类型 classCube { Colorscolor; public: Cube(Colorsc){color=c;} friendboolTestSame(Cubex,Cylindery); //声明为Cube的友元函数 }; classCylinder { Colorscolor; public: Cylinder(Colorsc){color=c;} friendboolTestSame(Cubex,Cylindery); //声明为Cylinder的友元函数 }; boolTestSame(Cubex,Cylindery) { if(x.color==y.color) returntrue; elsereturnfalse; } intmain() { Cubecube1(red), cube2(yellow); Cylindercyl(yellow); //声明对象并初始化 if(TestSame(cube1,cyl)) cout<<"Thecolorofcube1andcylarethesame.\n"; else cout<<"Thecolorofcube1andcylaredifferent.\n"; if(TestSame(cube2,cyl)) cout<<"Thecolorofcube2andcylarethesame.\n"; else cout<<"Thecolorofcube2andcylaredifferent.\n"; return0; } 【案例5-12】计算2个三角形之和——友元函数的应用 #include #include usingnamespacestd; classTrig { double x,y,z; doublearea() {doubled=(x+y+z)/2; returnsqrt(d*(d-x)*(d-y)*(d-z));} public: Trig(inti,intj,intk) {x=i;y=j;z=k; } intisTriangle() //判断是否构成三角形 { if (x+y>z&&x+z>y&&y+z>x) return1; else return0; } friend doubletwoarea(Trigtl,Trigt2) //声明友元函数 { returntl.area()+t2.area(); } }; intmain() { Trigtl(3,5,7),t2(8,7,12); if(tl.isTriangle()&&t2.isTriangle()) cout<<"TotalareaoftwoTriangles: "< else cout<<"CannotformaTriangle"< return0; } 【案例5-13】数据的单向传递——常引用作函数形参 #include usingnamespacestd; //常引用作形参,在函数中不能更新z所引用的对象,因此对应的实参不会被破坏。 voidfun(intx,int&y,constint&z) { x+=z; y+=z; cout<<"x="< } intmain() { inta=20,b=30,c=40;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序 结构 典型 案例