C ++通过访问器函数返回私有二维数组
Posted
技术标签:
【中文标题】C ++通过访问器函数返回私有二维数组【英文标题】:C++ return private 2D array by accessor function 【发布时间】: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**
不起作用?
Return a 2d array from a function的可能重复
@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 )
。
【参考方案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++ 无法从函数/方法返回数组。
【讨论】:
以上是关于C ++通过访问器函数返回私有二维数组的主要内容,如果未能解决你的问题,请参考以下文章