我创建了一个动态的类对象矩阵,但是处理返回的指针却使我大为混乱。
我的意图是创建一个类Point(Int x,Int y)的矩阵,然后在程序中以不同的方式使用它。一切正常,但我不知道函数之间返回的指针游戏。
class Point
{
private:
int x;
int y;
public:
Point(int x,int y);
void SetPoint(int x,int y);
};
在第二个类中,我将Point对象用作类成员。
Init_Pallet()用于初始化矩阵。
class Warehouse
{
private:
Robot r1,r2;
Point *Pallet_Matrix;
public:
Point* Init_Pallet();
};
这是初始化功能
Point* Warehouse::Init_Pallet()
{
int rows =10,cols =10;
Point** Pallet_Matrix = new Point*[rows];
for (int i = 0; i < rows; i++)
Pallet_Matrix[i] = new Point[cols];
for (int i = 0; i < rows; ++i)
for (int j = 0; j < cols; j++) //Pallet matrix Init, x point for robots amount in position and y for box amount
Pallet_Matrix[i][j].SetPoint(0,0);
return *Pallet_Matrix;
}
初始化函数由WareHouse C'Tor调用(忽略其他变量)
Warehouse::Warehouse(Robot p_r1,Robot p_r2): r1(p_r1),r2(p_r2)
{
this->r1=p_r1;
this->r2=p_r2;
Point *p =Init_Pallet();
this->Pallet_Matrix=p;
}
我的问题是:如何将地址从Init函数返回到调用它的C'Tor的矩阵的开头?第二个问题:将矩阵地址返回给C'Tor后,如何以Matrix [i] [j]的格式访问矩阵的不同位置。
预先感谢您提供的所有帮助和时间。
您应该只Init_Pallet
返回aPoint**
然后执行return Pallet_Matrix;
。当前,您正在复制Point*
从该函数中分配的s之一,因此该副本不再是可以索引的连续数组的一部分。
不要忘记delete[]
析构函数中的动态数组。
但是,您应该更喜欢使用标准库容器,例如std::array
或std::vector
。这样,您就不必担心自己的动态分配,也无需担心任何麻烦。
如果我这样做,我将只有:
class Warehouse
{
public:
Warehouse() : Pallet_Matrix() { }
private:
Robot r1,r2;
std::array<std::array<Point, 10>, 10> Pallet_Matrix;
};
就是这样。没有init
必要的。没有动态分配。请勿为每个元素分配0(如果您提供Point
默认的构造函数以零初始化)。做完了
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句