📄 cjj118.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>C++习题与解析(友元-04)</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<SCRIPT language=JavaScript>
var currentpos,timer;
function initialize()
{
timer=setInterval("scrollwindow()",50);
}
function sc(){
clearInterval(timer);
}
function scrollwindow()
{
currentpos=document.body.scrollTop;
window.scroll(0,++currentpos);
if (currentpos != document.body.scrollTop)
sc();
}
document.onmousedown=sc
document.ondblclick=initialize
</SCRIPT>
<META content="MSHTML 5.00.2614.3500" name=GENERATOR>
<link rel="stylesheet" href="body1.css" type="text/css">
</HEAD>
<BODY topMargin=0 marginheight="0" bgcolor="#CCCCCC">
<TABLE align=center border=1 cellPadding=0 cellSpacing=1
style="BORDER-COLLAPSE: collapse" width=550>
<TBODY>
<TR>
<TD bgColor=#c1c1c1 height=35> <img src="jsdd.gif" width="159" height="57" > <img src="jjdd.gif" ></TD>
</TR>
</TBODY>
</TABLE>
<TABLE align=center border=1 cellPadding=0 cellSpacing=1
style="BORDER-COLLAPSE: collapse" width=550>
<TBODY>
<TR>
<TD width="100%">
<TABLE border=0 borderColor=#e2ca9f cellPadding=0 cellSpacing=0
width="100%">
<TBODY>
<TR>
<TD align=middle vAlign=top width="95%">
<TABLE border=1 borderColor=#e2ca9f cellPadding=0 cellSpacing=0
width="100%">
<TBODY>
<TR>
<TD align=middle background=002.gif
borderColor=#e2ca9f vAlign=top width="69%">
<TABLE align=center border=0 cellPadding=0 cellSpacing=0
width="100%">
<TBODY>
<TR>
<TD height=35 width="100%"></TD>
</TR>
<TR>
<TD align=middle bgColor=#dddddd height=20
style="FONT-SIZE: 18px" vAlign=bottom
width="85%" class="body18black">C++习题与解析(友元-04)</TD>
<BR>
</TR>
<TR>
<TD align=middle width="100%"><BR>
</TD>
</TR>
<TR>
<TD align=middle width="100%">
<!--下面的这一句是设置阅读文本区的宽度-->
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width="75%">
<TBODY>
<TR>
<TD align=middle width="100%"></TD>
</TR>
<TR>
<TD class="body12black" >题6.采用友元函数的方法重新设计“引用<题8>”中的类Point,并求两个点之间的距离。<BR>
解:<BR>
将原来求两个点的距离的普通函数distance()改写为友元函数即可,可以看到采用友元函数方法使得代码更简洁。<BR>本题程序如下:<BR>#include<iostream.h><BR>#include<math.h><BR>class
Point<BR>{<BR> int
x,y;<BR>
public:<BR>
Point(int i,int
j){x=i;y=j;}<BR>
friend float distance(Point &p1,Point
&p2);<BR>
void
disp()<BR>
{<BR>
cout<<"("<<x<<","<<y<<")";<BR>
}<BR>};<BR>float distance(Point &p1,Point
&p2) //
友元函数的实现<BR>{<BR> float
d;<BR>
d=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));<BR>
return d;<BR>}<BR>void
main()<BR>{<BR> Point
p1(2,2),p2(5,5);<BR> p1.disp();
cout<<"与"; p2.disp();<BR>
cout<<"之间距离="<<distance(p1,p2)<<endl;<BR>}<BR><BR>本程序执行结果如下:<BR>(2,2)与(5,5)之间距离=4.24264<BR><BR>-------------------------------------------------------<BR><BR><FONT
color=#0000ff>题7.设计一个日期类Date,包括日期的年份、月份和日号,编写一个友元函数,求两个日期之间相差的天数。<BR></FONT>解:<BR>
该类中设计有3个友元函数;count_day()函数,它有两个参数,第2个参数是一个标志,当其值等于1
时,计算一年的开始到某日期的天数;否则计算某日期到年尾的天数。leap()函数用于判断指定的年份是否为闰年。subs()函数用于计算两个日期之间的天数。<BR>本题程序如下:<BR>#include<iostream.h><BR>#include<stdio.h><BR>class
Date<BR>{<BR> int
year;<BR> int
month;<BR> int
day;<BR>
public:<BR>
Date(int y,int m,int
d)<BR>
{<BR>
year=y;month=m;day=d;<BR>
}<BR>
void
disp()<BR>
{<BR>
printf("%d.%d.%d",year,month,day);<BR>
}<BR>
friend int count_day(Date
&d,int);<BR>
friend int leap(int
year);<BR>
friend int subs(Date &d1,Date
&d2);<BR>};<BR>int count_day(Date &d,int
flag)<BR>{<BR> static int
day_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},<BR> {31,29,31,30,31,30,31,31,30,31,30,31}};<BR>
//
使用二维数组存放各月天数,第一行对应非闰年,第二行对应闰年<BR>
int p,i,s;<BR>
if(leap(d.year))<BR>
p=1;<BR> else
p=0;<BR>
if(flag)<BR>
{<BR>
s=d.day;<BR>
for(i=1;i<d.month;i++)<BR>
s+=day_tab[p][i-1];<BR>
}<BR> else<BR>
{<BR>
s=day_tab[p][d.month]-d.day;<BR>
for(i=d.month+1; i<=12;
i++)<BR>
s+=day_tab[p][i-1];<BR>
}<BR> return s;<BR>}<BR>int
leap(int year)<BR>{<BR>
if(year%4==0&&year%100!=0||year%400==0)
//
是闰年<BR>
return 1;<BR> else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -