【项目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()函数用一个文件。体会这样安排的长处。

2015级C++第7周项目 友元、共享数据保护、多文件结构的更多相关文章

  1. 2015级C++第4周项目 函数

    [项目1-求最大公约数] 參考解答 (1)输入两个数.并求出其最大公约数 #include <iostream> using namespace std; //自己定义函数的原型(即函数声 ...

  2. 2015级C++第2周实践项目

    [项目1 - 宣告"主权"] 你已经是CSDN博客主了,用IT人特有的方式,编一段程序.在屏幕上输出你想说的话.按要求公布博文,作为我们的开山之作. [项目2 - 胖子不想说体重] ...

  3. 关于举办 2015年 Autodesk 助力云应用项目开发活动通知

    各位尊敬的Autodesk 合作伙伴,大家好! 相信您在过去的一年里应该对Autodesk最新的云服务技术有所了解,您是不是曾经闪现过一些很好的想法,却由于不确定是否真实可行,或担心没有技术支持来帮助 ...

  4. JavaEDU614 团队第三周项目总结

    JavaEDU614 团队第三周项目总结 本周,根据项目计划完成模块的设计代码 本项目主要是完成俄罗斯方块的基本操作.用户可以自己练习和娱乐.需要满足以下几点要求. (1)界面控制游戏开始.暂停和结束 ...

  5. 2014秋C++ 第8周项目 分支程序设计

    课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703.课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课 ...

  6. Surprise团队第三周项目总结

    Surprise团队第二周项目总结 项目进展 这周我们小组的项目在上周的基础上进行了补充,主要注重在注册登录界面的实现,以及关于数据库的一些学习. 在设计注册登录界面时,每一块的地方控件都不一样,比如 ...

  7. Surprise团队第二周项目总结

    Surprise团队第二周项目总结 项目进展 已实现五子棋人人模式部分 人人模式: 基本方式:采取黑棋先行,黑白交替的下棋顺序. 模式:通过鼠标点击相应棋盘中的"交叉点",在lay ...

  8. Surprise团队第一周项目总结

    Surprise团队第一周项目总结 团队项目 基本内容 五子棋(Gobang)的开发与应用 利用Android Studio设计一款五子棋游戏,并丰富其内涵 预期目标 实现人人模式:2个用户可以在同一 ...

  9. FromBottomToTop第十三周项目博客

    FromBottomToTop第十三周项目博客 本周项目计划 完成游戏核心算法以及界面相关类和怪物类 项目进展 用户可选择游戏模式,共有20张不同的地图. 炮台的建立和升级. 小怪的路径算法. 参考资 ...

随机推荐

  1. Linux下USB驱动框架分析【转】

    转自:http://blog.csdn.net/brucexu1978/article/details/17583407 版权声明:本文为博主原创文章,未经博主允许不得转载. http://www.c ...

  2. 如何使用python查看视频的长度

    import subprocess import re def get_length(filename): result = subprocess.Popen(["ffprobe" ...

  3. [thinkphp] MD!! 数组构造的好好的,硬是有一个值无法写入数据库

    我都要抓狂了,buildsql()方法又用不了,最后决定看runtime里面的文件.先删掉所有的runtime,然后提交一次,就可以在runtime里面看到对应解析后的文件,这样应该可以知道问题在哪. ...

  4. POJ 2923 【01背包+状态压缩/状压DP】

    题目链接 Emma and Eric are moving to their new house they bought after returning from their honeymoon. F ...

  5. 线段树【p1607】[USACO09FEB]庙会班车Fair Shuttle

    Description 逛逛集市,兑兑奖品,看看节目对农夫约翰来说不算什么,可是他的奶牛们非常缺乏锻炼--如果要逛完一整天的集市,他们一定会筋疲力尽的.所以为了让奶牛们也能愉快地逛集市,约翰准备让奶牛 ...

  6. Xamarin XAML语言教程通过数据绑定使用Progress属性

    Xamarin XAML语言教程通过数据绑定使用Progress属性 开发者除了可以为ProgressBar定义的Progress属性直接赋双精度类型的值外,还可以通过数据绑定的方式为该属性赋值,此时 ...

  7. Xamarin XAML语言教程构建进度条ProgressBar

    Xamarin XAML语言教程构建进度条ProgressBar Xamarin XAML语言教程构建进度条ProgressBar,ProgressBar被称为进度条,它类似于没有滑块的滑块控件.进度 ...

  8. [NOIP模拟赛][并没有用二分][乱搞AC]

    圆圈舞蹈 [问题描述] 熊大妈的奶牛在时针的带领下,围成了一个圆圈跳舞.由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到B的距离为A顺时针走和逆时针走,到达 ...

  9. selenium _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0

    在关闭driver时,如果用close,而不是用quit,会出现如下错误: Exception ignored in: <bound method Popen.__del__ of <su ...

  10. linux 远程同步数据工具rsync (1)

    rsync 远程同步数据工具,是linux下的数据备份工具rsync(remote sync 远程同步) 特点:在本地同步数据(类似于cp,但是有不同于远程scp),它会先判断已经存在的数据和远程数据 ...