一、两点之间的距离(类)
(1)问题及代码:
/*
* 文件名称:求两点间距离类
* 作 者:李锐
* 完成日期:2016 年 4 月 11日
* 版 本 号:v1.0
* 对任务及求解方法的描述部分:
* 输入描述:无
* 问题描述:要求用友元函数,一般函数和成员函数输出两点之间的距离;
* 程序输出:略
* 问题分析:略
* 算法设计:略
*/
#include<iostream>
#include<math.h>
using namespace std;
class CPoint
{
private:
double x; // 横坐标
double y; // 纵坐标
public:
CPoint(double xx=0,double yy=0):x(xx),y(yy){}
friend double juli2(CPoint t1,CPoint t2);
double juli(CPoint);
double getx()
{
return x;
}
double gety()
{
return y;
}
};
double CPoint::juli(CPoint p)
{
double a=sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));
return a;
}
double juli2(CPoint t1,CPoint t2)
{
double b;
b=sqrt((t1.x-t2.x)*(t1.x-t2.x)+(t1.y-t2.y)*(t1.y-t2.y));
return b;
}
void main()
{
double dis(CPoint p1,CPoint p2);
CPoint t1(1.1),t2(3,4);
cout<<"求点t1(1,1)与点t2(3,4)之间的距离: "<<endl;
cout<<"调用成员函数,t1与t2之间的距离是:"<<t1.juli(t2)<<endl;
cout<<"调用一般函数,t1与t2之间的距离是:"<<dis(t1,t2)<<endl;
cout<<"调用友元函数,t1与t2之间的距离是:"<<juli2(t1,t2)<<endl;
}
double dis(CPoint p1,CPoint p2)
{
double b;
b=sqrt((p1.getx()-p2.getx())*(p1.getx()-p2.getx())+(p1.gety()-p2.gety())*(p1.gety()-p2.gety()));
return b;
}
(2)运行结果:
二、时间的友元类:
(1)问题及代码:
/*
* 文件名称:时间的友元类
* 作 者:李锐
* 完成日期:2016 年 4 月 11日
* 版 本 号:v1.0
* 对任务及求解方法的描述部分:
* 输入描述:无
* 问题描述:要求用友元类;
* 程序输出:略
* 问题分析:略
* 算法设计:略
*/
#include<iostream>
#include<math.h>
using namespace std;
class Date
{
public:
Date(int m=1,int d=1,int y=2000):month(m),day(d),year(y) {}
friend class Time; //Time为Date的友元类
private:
int month;
int day;
int year;
};
class Time
{
public:
Time(int h=0,int m=0,int s=0):hour(h),minute(m),sec(s) {}
void add_a_second(Date &); //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年
void display(Date &); //显示时间,格式:月/日/年 时:分:秒
private:
int hour;
int minute;
int sec;
};
void Time::add_a_second(Date &t)
{
int a[7]={1,3,5,7,8,10,12};
int b[4]={4,6,9,11};
int i;
sec=sec+1;
if(sec>60)
{minute+=1;sec=0;}
if(minute>=60)
{ hour+=1;minute=0;}
if(hour>=24)
{ t.day+=1;hour=0;}
for(i=0;i<7;i++)
{
if(t.day>31&&t.month==a[i])
{t.month+=1;t.day=1;}
}
for(i=0;i<4;i++)
{
if(t.day>30&&t.month==b[i])
{t.month+=1;t.day=1;}
}
if(t.month==2&&t.year%4==0)
{
if(t.day>29)
{t.month+=1;t.day=1;}
}
if(t.month==2&&t.year%4!=0)
{
if(t.day>28)
{t.month+=1;t.day=1;}
}
if(t.month>12)
{ t.year+=1;t.month=1;}
}
void Time::display(Date &p)
{
cout<<p.month<<"/"<<p.day<<"/"<<p.year<<" "<<hour<<":"<<minute<<":"<<sec<<endl;
}
int main( )
{
Time t1(23,59,55);
Date d1(12,31,2013); //测试时,再试试Date d1(2,28,2013)会如何
for(int i=0; i<=65; i++)
{
t1.add_a_second(d1);
t1.display(d1);
}
return 0;
}
//下面定义两个类中的成员函数,要求不得再增加成员函数
//注意体会在Time的成员函数中可以调用Date类的私有数据成员
(2.1)用d1(12,31,2013)的运行结果:
(2.2)用d1(2,28,2013)的运行结果: