【问题标题】:C++ return private 2D array by accessor functionC ++通过访问器函数返回私有二维数组
【发布时间】:2018-11-21 10:14:08
【问题描述】:

我有一个 C++ 类,它有一个函数,该函数从同一类的另一个变量中获取一个二维数组,以便该数组的这个特定实例可以访问另一个变量。有问题的变量是一个二维数组。给定下面的代码,您将如何实现访问器函数来获取私有二维数组变量。我的意图是让访问器返回 2d 数组,但我不知道要使用哪种返回类型。 int[][]、int**、int* 和 int 不起作用。

class MyClass{
  public:
    // gets private x variable from another MyClass variable
    void proccessVar(const MyClass& aVar){
      // get and process the 2D array by calling getX()
      // int temp[10][10];
      // temp = aVar.getX();
      // proccess temp 2D array
    }

    // Return 2D array x
    int** getX(){
      return x;
    }

  private:
    int x[10][10] = {{0},{0}}; // initialized value
}

【问题讨论】:

  • 有什么理由不使用 std::array?
  • 为什么int** 不起作用?
  • @Korni 返回 x 我收到错误:无法将'int ()[10]' 转换为'int*' 作为回报。
  • @Korni 因为x 在衰减为指针时不是“指向 int 指针的指针”类型,而是“指向 10 个 int 数组的指针”。 int**int (*)[10] 不同。如果int **a; a[1][2] 编译器执行*( *(a + 1) + 2) 如果int (*a)[10]; a[1][2] 然后编译器执行*( a + 1 * 10 + 2 )

标签: c++ arrays multidimensional-array


【解决方案1】:
int x[10][10]

x 是 10 个 10 个整数的二维数组。

让我们衰减到一个指针:

int (*y)[10] = x;

y 是一个指向 10 个整数数组的指针。

您应该返回一个指向 10 个整数数组的指针:

int (*getX())[10] {
  return x;
}

或者重新考虑你的方法和使用 std::array。

【讨论】:

  • OP 也可以返回int(&)[10][10](或等效的decltype(auto))并保留大小信息。
【解决方案2】:

现有的答案(返回一个指向一维数组的指针)有效,但下面的答案可能不那么令人困惑。

这个想法是返回对二维数组的引用。语法是:

class MyClass
{
    ...
    int (&getX())[10][10]
    {
        return x;
    }
};

或者,使用typedef

using myarray = int[10][10];
class MyClass
{
    ...
    myarray& getX()
    {
        return x;
    }
};

所有这些变通方法都是因为 C++ 无法从函数/方法返回数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-29
    • 2017-02-06
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2021-12-04
    • 2014-12-19
    相关资源
    最近更新 更多