整理C++程序的结构典型案例.docx
《整理C++程序的结构典型案例.docx》由会员分享,可在线阅读,更多相关《整理C++程序的结构典型案例.docx(14页珍藏版)》请在冰点文库上搜索。
整理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.ax.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;
}
2.早期介入原则;
(3)旅行费用法【案例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;
}
4.广泛参与原则。
(2)评价范围。
根据评价机构专业特长和工作能力,确定其相应的评价范围。
【案例5-13】数据的单向传递——常引用作函数形参
#include
usingnamespacestd;
//常引用作形参,在函数中不能更新z所引用的对象,因此对应的实参不会被破坏。
voidfun(intx,int&y,constint&z)
{
x+=z;
y+=z;
cout<<"x="<}
intmain()
{
inta=20,b=30,c=40;
cout<<"a="< fun(a,b,c);
cout<<"a="< fun(2*a-3,b,c);
cout<<"a="< return0;
}
【案例5-14】成员函数的选择调用——常成员函数
#include
usingnamespacestd;
classZRF
{
public:
ZRF(intZ1,intZ2){ZRF1=Z1;ZRF2=Z2;}
voiddisp();
voiddisp()const; //常成员函数声明
private:
intZRF1,ZRF2;
};
voidZRF:
:
disp()
{
cout<"<}
voidZRF:
:
disp()const //常成员函数定义
{
cout<"<}
intmain()
{
ZRFa(2,3);
a.disp(); //调用voiddisp()
constZRFb(10,20);
b.disp(); //调用voiddisp()const
return0;
}
仍以森林为例,营养循环、水域保护、减少空气污染、小气候调节等都属于间接使用价值的范畴。
一、环境影响评价的基础【案例5-15】计算圆周长——不带参数的宏定义
#include
usingnamespacestd;
#definePI3.14159 //宏名PI为符号常量
#definena //宏名n将用a来替换
#defineLENGTH 2*PI*n //宏名LENGTH将用2*PI*n来替换
intmain()
{
intn=1; //intn=1;替换为inta=1;
cout<<"LENGTH="< return0;
}
【案例5-16】求三角形面积——带参数的宏函数
#include
#include
usingnamespacestd;
#defines(a,b,c) (a+b+c)/2 //带参数的宏
#definearea(a,b,c)sqrt(s(a,b,c)*(s(a,b,c)-a)*(s(a,b,c)-b)*(s(a,b,c)-c))