【问题标题】:passing array of object to member function in c++ [closed]在c ++中将对象数组传递给成员函数[关闭]
【发布时间】:2015-08-21 19:19:41
【问题描述】:

我是 C++ 中 oop 的初学者,在编程中可以说是公平的。我正在尝试创建对象数组并将其传递给成员函数 sort(class_name[size]) 以按它们的 id 号排序。 我已经非常努力地传递对象数组,但找不到解决方案。 请帮忙。

提前致谢。

【问题讨论】:

  • 首先,发布MCVE。其次,排序功能是一些练习的一部分吗?如果没有,请使用std::sort(the_array, the_array + the_array_length);
  • 使用更直观的类如std::vectorstd::array。 C 数组语法很丑。
  • 不要传递数组,使用std::vector。您的问题是 std::vector 旨在解决的问题。
  • @shrijantripathi 在 cmets 中粘贴代码墙不是正确的做法。它属于您的问题,格式正确,格式允许复制/粘贴 + 编译 + 运行 = 问题状态。
  • @shrijantripathi 不用担心,但在询问之前花点时间reading these。将其视为自我保护,因为遵循这些准则将从根本上降低受火洗礼的核心温度。

标签: c++ arrays class object


【解决方案1】:

传统上和错误地,数组已被传递:

  1. 数组名称
  2. 第一个元素的地址

最大的问题是数组的长度(容量)。在 C 和 C++ 中,数组(不是 std::array)不存储它的容量。所以接收函数对数组的末尾没有任何线索。

另一个问题是数组中元素的数量。在 C 和 C++ 中,数组结构不维护数组中的项目数。一个数组可能有 32 个元素的容量,但只加载了 3 个元素。

如果您编写自己的函数并使用数组,请提供数组的参数、数组的容量和元素数量。

编辑 1:
传递指针或第一个元素的地址的一个问题是指针仅指向单个字符,从技术上讲,它不是数组对象。假设数组是一个容器,其中元素是连续的,中间没有其他数据类型。因此,您只需要知道数组的第一个位置。

一个问题是我可以传递一个指向单个字符的指针,而接收函数会将数据视为字符数组而不是单个字符。从而创建通常称为缓冲区溢出的未定义行为。

所以为了更安全,在传递数组时应该使用数组语法,而不是指向第一个元素的指针。为了更好的安全性,使用std::vectorstd::array 或将数组放入结构中并传递结构。

【讨论】:

  • 数组的大小存储在类型中。可以在 C 和 C++ 中保留该信息。
猜你喜欢
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多