返回介绍

10.5 对象数组

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

和 Stock 示例一样,用户通常要创建同一个类的多个对象。可以创建独立对象变量,就像本章前面的示例所做的,但创建对象数组将更合适。这似乎是在介绍一个未知领域,但实际上,声明对象数组的方法与声明标准类型数组相同:

前面讲过,当程序创建未被显式初始化的类对象时,总是调用默认构造函数。上述声明要求,这个类要么没有显式地定义任何构造函数(在这种情况下,将使用不执行任何操作的隐式默认构造函数),要么定义了一个显式默认构造函数(就像这个例子那样)。每个元素(mystuff[0]、mystuff[1]等)都是 Stock 对象,可以使用 Stock 方法:

可以用构造函数来初始化数组元素。在这种情况下,必须为每个元素调用构造函数:

这里的代码使用标准格式对数组进行初始化:用括号括起的、以逗号分隔的值列表。其中,每次构造函数调用表示一个值。如果类包含多个构造函数,则可以对不同的元素使用不同的构造函数:

上述代码使用 Stock(const string & co, long n, double pr) 初始化 stock[0]和 stock[2],使用构造函数 Stock( ) 初始化 stock[1]。由于该声明只初始化了数组的部分元素,因此余下的 7 个元素将使用默认构造函数进行初始化。

初始化对象数组的方案是,首先使用默认构造函数创建数组元素,然后花括号中的构造函数将创建临时对象,然后将临时对象的内容复制到相应的元素中。因此,要创建类对象数组,则这个类必须有默认构造函数。

程序清单 10.9 在一个小程序中使用了这些原理,该程序对 4 个数组元素进行初始化,显示它们的内容,并找出这些元素中总值最高的一个。由于 topval( ) 每次只检查两个对象,因此程序使用 for 循环来检查整个数组。另外,它使用 stock 指针来跟踪值最高的元素。该程序使用程序清单 10.7 中的头文件和程序清单 10.8 中的方法文件。

程序清单 10.9 usestock2.cpp

下面是该程序的输出:

有关程序清单 10.9,需要注意的一点是,大部分工作是在类设计中完成的。完成类设计后,编写程序的工作本身便相当简单。

顺便说一句,知道 this 指针就可以更深入了解 C++的工作方式。例如,最初的 UNIX 实现使用 C++前端 cfront 将 C++程序转换为 C 程序。处理方法的定义时,只需将下面这样的 C++方法定义:

转换为下面这样的 C-风格定义:

即将 Stock::限定符转换为函数参数(指向 Stock 的指针),然后用这个指针来访问类成员。

同样,该前端将下面的函数调用:

转换为:

这样,将调用对象的地址赋给了 this 指针(实际情况可能更复杂些)。

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

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

发布评论

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