返回介绍

14.7 编程练习

发布于 2024-10-08 23:14:11 字数 3207 浏览 0 评论 0 收藏 0

1.Wine 类有一个 string 类对象成员(参见第 4 章)和一个 Pair 对象(参见本章);其中前者用于存储葡萄酒的名称,而后者有 2 个 valarray<int>对象(参见本章),这两个 valarray<int>对象分别保存了葡萄酒的酿造年份和该年生产的瓶数。例如,Pair 的第 1 个 valarray<int>对象可能为 1988、1992 和 1996 年,第 2 个 valarray<int>对象可能为 24、48 和 144 瓶。Wine 最好有 1 个 int 成员用于存储年数。另外,一些 typedef 可能有助于简化编程工作:

这样,PairArray 表示的是类型 Pair<std::valarray<int>, std::valarray<int> >。使用包含来实现 Wine 类,并用一个简单的程序对其进行测试。Wine 类应该有一个默认构造函数以及如下构造函数:

Wine 类应该有一个 GetBottles( ) 方法,它根据 Wine 对象能够存储几种年份(y),提示用户输入年份和瓶数。方法 Label( ) 返回一个指向葡萄酒名称的引用。sum( ) 方法返回 Pair 对象中第二个 valarray<int>对象中的瓶数总和。

测试程序应提示用户输入葡萄酒名称、元素个数以及每个元素存储的年份和瓶数等信息。程序将使用这些数据来构造一个 Wine 对象,然后显示对象中保存的信息。

下面是一个简单的测试程序:

下面是该程序的运行情况:

2.采用私有继承而不是包含来完成编程练习 1。同样,一些 typedef 可能会有所帮助,另外,您可能还需要考虑诸如下面这样的语句的含义:

您设计的类应该可以使用编程练习 1 中的测试程序进行测试。

3.定义一个 QueueTp 模板。然后在一个类似于程序清单 14.12 的程序中创建一个指向 Worker 的指针队列(参见程序清单 14.10 中的定义),并使用该队列来测试它。

4.Person 类保存人的名和姓。除构造函数外,它还有 Show( ) 方法,用于显示名和姓。Gunslinger 类以 Person 类为虚基类派生而来,它包含一个 Draw( ) 成员,该方法返回一个 double 值,表示枪手的拔枪时间。这个类还包含一个 int 成员,表示枪手枪上的刻痕数。最后,这个类还包含一个 Show( ) 函数,用于显示所有这些信息。

PokerPlayer 类以 Person 类为虚基类派生而来。它包含一个 Draw( ) 成员,该函数返回一个 1~52 的随机数,用于表示扑克牌的值(也可以定义一个 Card 类,其中包含花色和面值成员,然后让 Draw( ) 返回一个 Card 对象)。PokerPlayer 类使用 Person 类的 show( ) 函数。BadDude( ) 类从 Gunslinger 和 PokerPlayer 类公有派生而来。它包含 Gdraw( ) 成员(返回坏蛋拔枪的时间)和 Cdraw( ) 成员(返回下一张扑克牌),另外还有一个合适的 Show( ) 函数。请定义这些类和方法以及其他必要的方法(如用于设置对象值的方法),并使用一个类似于程序清单 14.12 的简单程序对它们进行测试。

5.下面是一些类声明:

注意,该类层次结构使用了带虚基类的 MI,所以要牢记这种情况下用于构造函数初始化列表的特殊规则。还需要注意的是,有些方法被声明为保护的。这可以简化一些 highfink 方法的代码(例如,如果 highfink::ShowAll( ) 只是调用 fink::ShowAll( ) 和 manager::ShwAll( ),则它将调用 abstr_emp::ShowAll( ) 两次)。请提供类方法的实现,并在一个程序中对这些类进行测试。下面是一个小型测试程序:

为什么没有定义赋值运算符?

为什么要将 ShowAll( ) 和 SetAll( ) 定义为虚的?

为什么要将 abstr_emp 定义为虚基类?

为什么 highfink 类没有数据部分?

为什么只需要一个 operator<<( ) 版本?

如果使用下面的代码替换程序的结尾部分,将会发生什么情况?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文