【项目1-成员函数、友元函数和一般函数有差别】參考解答

  (1)阅读以下的程序,体会凝视中的说明(要执行程序,请找到课程主页并复制代码)

  1. //例:使用成员函数、友元函数和一般函数的差别
  2. #include <iostream>
  3. using namespace std;
  4. class Time
  5. {
  6. public:
  7. Time(int h,int m,int s):hour(h),minute(m),sec(s) {}
  8. void display1(); //display1是成员函数
  9. friend void display2(Time &); //display2是友元函数
  10. int getHour(){return hour;}
  11. int getMinute(){return minute;}
  12. int getSec(){return sec;}
  13. private:
  14. int hour;
  15. int minute;
  16. int sec;
  17. };
  18. void Time::display1() //成员函数display1的实现,dispaly1前加Time::
  19. {
  20. //以hour形式直接訪问私有数据成员,实质是this->hour形式
  21. cout<<hour<<":"<<minute<<":"<<sec<<endl;
  22. }
  23. void display2(Time &t) //友元函数dispaly2的实现,不加Time::,友元并非类的成员
  24. {
  25. //尽管不是类的成员函数。却能够用t.hour的形式直接訪问私有数据成员——这就是友元
  26. cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;
  27. }
  28. void display3(Time &t) //display3是一般函数,dispaly3前不加Time::
  29. {
  30. //不能直接訪问。仅仅能用公共接口t.getHour()形式訪问私有数据成员
  31. cout<<t.getHour()<<":"<<t.getMinute()<<":"<<t.getSec()<<endl;
  32. }
  33. int main()
  34. {
  35. Time t1(10,13,56);
  36. t1.display1(); //成员函数这样调用:对象名.函数名()
  37. display2(t1); //友员函数的调用和一般函数无异(但实现中能够不同)
  38. display3(t1); //一般函数的调用
  39. return 0;
  40. }

  (2)模仿上面的演示样例,完毕求点类中距离的任务。你须要实现求距离函数的三种版本号:分别利用成员函数、友元函数和一般函数求两点间距离的函数,并设计main()函数完毕測试。

提示:此项目和样例的差别在于“距离是一个点和另外一个点的距离”,不同版本号在參数上有体现。三个版本号建议分开測试,也能够如演示样例,放在一个程序中完毕。

  以下是点类的部分代码。

  1. class CPoint
  2. {
  3. private:
  4. double x; // 横坐标
  5. double y; // 纵坐标
  6. public:
  7. CPoint(double xx=0,double yy=0):x(xx),y(yy){}
  8. ……//请继续写须要的代码
  9. };

【项目2-友元类】 參考解答

  定义以下两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计。将两个类的合并为一个DateTime,日期、时间都处理更好)

  1. class Date; //对Date类的提前引用声明
  2. class Time
  3. {
  4. public:
  5. Time(int,int,int);
  6. void add_a_second(Date &); //添加1秒,1秒后可能会到了下一天,乃到下一月、下一年
  7. void display(Date &); //显示时间,格式:月/日/年 时:分:秒
  8. private:
  9. int hour;
  10. int minute;
  11. int sec;
  12. };
  13. class Date
  14. {
  15. public:
  16. Date(int,int,int);
  17. friend class Time; //Time为Date的友元类
  18. private:
  19. int month;
  20. int day;
  21. int year;
  22. };
  23. int main( )
  24. {
  25. Time t1(23,59,32);
  26. Date d1(12,31,2013); //測试时。再试试Date d1(2,28,2013)会怎样
  27. for(int i=0; i<=100; i++)
  28. {
  29. t1.add_a_second(d1);
  30. t1.display(d1);
  31. }
  32. return 0;
  33. }
  34. //以下定义两个类中的成员函数。要求不得再添加成员函数
  35. //注意体会在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. 多个类的DLL封装及调用

    #define FaceLIBDLL #include "stdafx.h" #include "facedll.h" #include <opencv2 ...

  2. IFC and BFC

    BFC and IFC 1,IFC -- 针对行内元素 -- 行内格式上下文 BFC --针对块级元素 -- 块级格式上下文 2,IFC特点: 行框的高度由包含元素的高度和有没有float元素决定. ...

  3. 新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛)B 杨老师的游戏【暴力/next-permutation函数/dfs】

    链接:https://www.nowcoder.com/acm/contest/116/B 来源:牛客网 题目描述 杨老师给同学们玩个游戏,要求使用乘法和减法来表示一个数,他给大家9张卡片,然后报出一 ...

  4. POJ 3264 Balanced Lineup(zkw线段树)

    [题目链接] http://poj.org/problem?id=3264 [题目大意] 求区间最大值和最小值的差值 [题解] 线段树维护区间极值即可 [代码] #include <cstdio ...

  5. 新建一个兼容eclipse和myeclipse、IDEA都兼容的项目结构(maven)

    以下观点为个人理解,没实践过,后续再实现. 思路: 1.eclipse和myeclipse.IDEA这些开发工具新建的各自的项目时,都有自己的一套思路,项目结构都有各自的特点. 2.如果是这些开发工具 ...

  6. 在C#中用RX库和await来实现直观的状态机

    在程序的设计过程中,我们经常会遇到一些需要使用状态机的场景,相信状态机的编写和维护是令每一个程序员都非常头大的事情.到了C# 5.0后,由于引进了await语法糖,我们可以通过await和Reacti ...

  7. Delphi 使用 SPcomm 调试串口程序出现总是在程序断开的时候,才发送指令的问题。

    问题如上, 在与嵌入式程序串口程序通讯的时候, 总是出现如上问题, 造成的原因把下面的True改成false就可以了. 下图Spcomm的属性页,几个True全改成False再试试

  8. Working with the NSOperationQueue Class

    Multi-tasking prevents apps from freezing. In most programming languages, achieving this is a bit tr ...

  9. 【mybatis】mybatis中 的# 和 $的区别

    mybatis中 的# 和 $的区别 参考地址:https://www.cnblogs.com/sxdcgaq8080/p/10869144.html

  10. LCIS线段树(区间更新)

    首先线段树每一个节点包含:[b,e],lmax,rmax,max;其中lmax表示从左端点开始连续的最长的增序列长度,rmax表示从e端点开始向左连续的最长下降序列长度,max表示当前区间的连续递增的 ...