【项目1-成员函数、友元函数和一般函数有差别】參考解答
(1)阅读以下的程序,体会凝视中的说明(要执行程序,请找到课程主页并复制代码)
//例:使用成员函数、友元函数和一般函数的差别
#include <iostream>
using namespace std;
class Time
{
public:
Time(int h,int m,int s):hour(h),minute(m),sec(s) {}
void display1(); //display1是成员函数
friend void display2(Time &); //display2是友元函数
int getHour(){return hour;}
int getMinute(){return minute;}
int getSec(){return sec;}
private:
int hour;
int minute;
int sec;
};
void Time::display1() //成员函数display1的实现,dispaly1前加Time::
{
//以hour形式直接訪问私有数据成员,实质是this->hour形式
cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
void display2(Time &t) //友元函数dispaly2的实现,不加Time::,友元并非类的成员
{
//尽管不是类的成员函数。却能够用t.hour的形式直接訪问私有数据成员——这就是友元
cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;
}
void display3(Time &t) //display3是一般函数,dispaly3前不加Time::
{
//不能直接訪问。仅仅能用公共接口t.getHour()形式訪问私有数据成员
cout<<t.getHour()<<":"<<t.getMinute()<<":"<<t.getSec()<<endl;
}
int main()
{
Time t1(10,13,56);
t1.display1(); //成员函数这样调用:对象名.函数名()
display2(t1); //友员函数的调用和一般函数无异(但实现中能够不同)
display3(t1); //一般函数的调用
return 0;
}
(2)模仿上面的演示样例,完毕求点类中距离的任务。你须要实现求距离函数的三种版本号:分别利用成员函数、友元函数和一般函数求两点间距离的函数,并设计main()函数完毕測试。
提示:此项目和样例的差别在于“距离是一个点和另外一个点的距离”,不同版本号在參数上有体现。三个版本号建议分开測试,也能够如演示样例,放在一个程序中完毕。
以下是点类的部分代码。
class CPoint
{
private:
double x; // 横坐标
double y; // 纵坐标
public:
CPoint(double xx=0,double yy=0):x(xx),y(yy){}
……//请继续写须要的代码
};
【项目2-友元类】 參考解答
定义以下两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计。将两个类的合并为一个DateTime,日期、时间都处理更好)
class Date; //对Date类的提前引用声明
class Time
{
public:
Time(int,int,int);
void add_a_second(Date &); //添加1秒,1秒后可能会到了下一天,乃到下一月、下一年
void display(Date &); //显示时间,格式:月/日/年 时:分:秒
private:
int hour;
int minute;
int sec;
};
class Date
{
public:
Date(int,int,int);
friend class Time; //Time为Date的友元类
private:
int month;
int day;
int year;
};
int main( )
{
Time t1(23,59,32);
Date d1(12,31,2013); //測试时。再试试Date d1(2,28,2013)会怎样
for(int i=0; i<=100; i++)
{
t1.add_a_second(d1);
t1.display(d1);
}
return 0;
}
//以下定义两个类中的成员函数。要求不得再添加成员函数
//注意体会在Time的成员函数中能够调用Date类的私有数据成员
【项目3-用多文件组织多个类的程序】 參考解答
将上一周“项目2-带武器的游戏角色”用“一个项目多个文件”的方式实现,当中两个类的声明放在一个.h文件里,每一个类的成员函数分别放一个文件。main()函数用一个文件。体会这样安排的长处。