C++ 返回c+中的二维指针数组+;
我有一个类和另一个类,它们的类成员是第一个类类型的2d数组。 我需要一个返回该类成员的函数C++ 返回c+中的二维指针数组+;,c++,arrays,class,2d,C++,Arrays,Class,2d,我有一个类和另一个类,它们的类成员是第一个类类型的2d数组。 我需要一个返回该类成员的函数 class Piece { // something is implemented here/ }; class Board { private: Piece* _pieces[8][8]; public: Piece*** getPieces() { return _pieces; } } 但这不起作用。例如, INTA[3][6]; int*
class Piece
{
// something is implemented here/
};
class Board
{
private:
Piece* _pieces[8][8];
public:
Piece*** getPieces()
{
return _pieces;
}
}
但这不起作用。例如,
INTA[3][6];
int**p=a;//这是错误的
您应该像这样使用指针:
int(*p)[6];
p=a 这是我制作的类的快速版本,允许2d数组的传递工作
class Board
{
private:
Piece ** _pieces = new Piece*[8];
public:
Board()
{
for(int i = 0; i<8; i++)
_pieces[i] = new Piece[8];
}
Piece** getPieces()
{
return _pieces;
}
~Board()
{
for(int i = 0; i<8; i++) delete [] _pieces[i];
delete [] _pieces;
}
};
课程板
{
私人:
件**件=新件*[8];
公众:
董事会()
{
对于(inti=0;i来说,如果可以访问C++11/14/17,可以使用std::array来创建指针的2D数组,这比使用衰减为ptr的内置数组更干净、更具表达力。
下面是一个示例,说明如何创建并从Booard返回指向碎片的8x8 2D指针数组
#include <array>
class Piece
{
// something is implemented here/
};
using Pieces=std::array<std::array<Piece*,8>,8>;
class Board
{
private:
Pieces _pieces;
public:
const Pieces& getPieces()
{
return _pieces;
}
};
#包括
班级作品
{
//这里实施了一些措施/
};
使用片段=std::数组;
班级委员会
{
私人:
件(件),;
公众:
const-Pieces和getPieces()
{
退货(件);;
}
};
正如@Galik在评论中所建议的,您应该在这里使用std::array,因为大小是常量表达式
标准并没有真正强制要求它,但对于常见的实现,std::array
确实有一个真正的T[i][j]
2D数组作为底层数据-换言之,连续行使用相邻内存。std::vector
另一方面更像指针数组,连续行的数据在内存中通常不相邻
代码可以变成:
class Board
{
private:
std::array<std::array<Piece*, 8>, 8> _pieces;
public:
std::array<std::array<Piece*, 8>, 8>& getPieces()
{
return _pieces;
}
}
课程板
{
私人:
std::数组_块;
公众:
std::array&getPieces()
{
退货(件);;
}
}
但这仍然是一个糟糕的设计,因为它不必要地暴露了底层实现,所以您真的应该仔细考虑Board
类的公共方法。数组不是指针。无论哪种方式,即使尝试返回指向实例数据的非常量指针也是不明智的。enca的重大突破psulation..你并不真的想返回整个电路板,你需要像bool is_king(square);
或actionsvoid move(square from,square to)这样的查询功能这对我来说有点像货物崇拜编程,为什么你一开始就声明它是私有的?只是为了让它再次公开?请考虑<代码> STD::数组x片段; >但是你的代码不存储2D数组指针到Opks> Tabe<代码>,如OP打算的。另一方面,这可能是OP所要求的,他是什么意思?lly needs是一个成员pieces\u pieces[64];
并跳过getter。否则他将创建世界上最慢的国际象棋程序。