- 内容提要
- 前言
- 第 1 章 预备知识
- 第 2 章 开始学习 C++
- 第 3 章 处理数据
- 第 4 章 复合类型
- 第 5 章 循环和关系表达式
- 第 6 章 分支语句和逻辑运算符
- 第 7 章 函数——C++的编程模块
- 第 8 章 函数探幽
- 第 9 章 内存模型和名称空间
- 第 10 章 对象和类
- 第 11 章 使用类
- 第 12 章 类和动态内存分配
- 第 13 章 类继承
- 第 14 章 C++中的代码重用
- 第 15 章 友元、异常和其他
- 第 16 章 string 类和标准模板库
- 第 17 章 输入、输出和文件
- 第 18 章 探讨 C++新标准
- 附录 A 计数系统
- 附录 B C++保留字
- 附录 C ASCII 字符集
- 附录 D 运算符优先级
- 附录 E 其他运算符
- 附录 F 模板类 string
- 附录 G 标准模板库方法和函数
- 附录 H 精选读物和网上资源
- 附录 I 转换为 ISO 标准 C++
- 附录 J 复习题答案
11.9 编程练习
1.修改程序清单 11.5,使之将一系列连续的随机漫步者位置写入到文件中。对于每个位置,用步号进行标示。另外,让该程序将初始条件(目标距离和步长)以及结果小结写入到该文件中。该文件的内容与下面类似:
2.对 Vector 类的头文件(程序清单 11.13)和实现文件(程序清单 11.14)进行修改,使其不再存储矢量的长度和角度,而是在 magval( ) 和 angval( ) 被调用时计算它们。
应保留公有接口不变(公有方法及其参数不变),但对私有部分(包括一些私有方法)和方法实现进行修改。然后,使用程序清单 11.15 对修改后的版本进行测试,结果应该与以前相同,因为 Vector 类的公有接口与原来相同。
3.修改程序清单 11.15,使之报告 N 次测试中的最高、最低和平均步数(其中 N 是用户输入的整数),而不是报告每次测试的结果。
4.重新编写最后的 Time 类示例(程序清单 11.10、程序清单 11.11 和程序清单 11.12),使用友元函数来实现所有的重载运算符。
5.重新编写 Stonewt 类(程序清单 11.16 和程序清单 11.17),使它有一个状态成员,由该成员控制对象应转换为英石格式、整数磅格式还是浮点磅格式。重载<<运算符,使用它来替换 show_stn( ) 和 show_lbs( ) 方法。重载加法、减法和乘法运算符,以便可以对 Stonewt 值进行加、减、乘运算。编写一个使用所有类方法和友元的小程序,来测试这个类。
6.重新编写 Stonewt 类(程序清单 11.16 和程序清单 11.17),重载全部 6 个关系运算符。运算符对 pounds 成员进行比较,并返回一个 bool 值。编写一个程序,它声明一个包含 6 个 Stonewt 对象的数组,并在数组声明中初始化前 3 个对象。然后使用循环来读取用于设置剩余 3 个数组元素的值。接着报告最小的元素、最大的元素以及大于或等于 11 英石的元素的数量(最简单的方法是创建一个 Stonewt 对象,并将其初始化为 11 英石,然后将其同其他对象进行比较)。
7.复数有两个部分组成:实数部分和虚数部分。复数的一种书写方式是:(3.0,4.0),其中,3.0 是实数部分,4.0 是虚数部分。假设 a = (A, Bi),c = (C, Di),则下面是一些复数运算。
- 加法:a + c = (A+C, (B+D)i)。
- 减法:a – c = (A−C, (B−D)i)。
- 乘法:a * c = (A*C−B*D, (A*D + B*C)i)。
- 乘法::x*c = (x * C, x *Di),其中 x 为实数。
- 共轭:~a = (A, −Bi)。
请定义一个复数类,以便下面的程序可以使用它来获得正确的结果。
注意,必须重载运算符<<和>>。标准 C++使用头文件 complex 提供了比这个示例更广泛的复数支持,因此应将自定义的头文件命名为 complex0.h,以免发生冲突。应尽可能使用 const。
下面是该程序的运行情况。
请注意,经过重载后,cin >>c 将提示用户输入实数和虚数部分。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论