将二维数组传递给另一个类 C++
Posted
技术标签:
【中文标题】将二维数组传递给另一个类 C++【英文标题】:passing 2D array to another class C++ 【发布时间】:2013-10-31 04:23:09 【问题描述】:我正在尝试计算矩形的周长。首先,我将提示用户 4 次 X 和 Y 线并将其存储到 2D 数组中,并将此 2D 数组传递给另一个类,即方法类以继续计算周长。但问题是,我不知道如何将二维数组传递给方法类。
我不是在问如何计算周长,我只需要知道如何将 2D 数组从 main 传递到方法类,并在方法类中获取 2D 数组。 请指教。
main.cpp
Method method;
int main()
int storeXandY[4][2];
for(int i=1;i<5;i++)
cout << "Please enter x-ordinate" << i<< endl;
cin>>storeXandY[i][0];
cout << "Please enter y-ordinate" << i << endl;
cin>>storeXandY[i][1];
//how to pass the 2D array to method class to do some calculations?
// I was thinking something like passing the 2d array to a consturctor but don't know whether it can be done
method.constructor(storeXandY);
方法.h
//not sure of what to do
public:
constructor()
方法.cpp
//how to get the cords from 2d array from main
请指教。谢谢
【问题讨论】:
您通常希望避免在 C++ 中使用数组,并且它们的维度越多,您就越想避免使用它们。一个围绕向量的小包装器,重载operator()
以处理多维寻址几乎总是更容易处理。例如,***.com/a/12009991/179910
非常感谢您的建议
【参考方案1】:
你可以这样做:
class Method
...
public int calcPerimeter(int vals[4][2])
// do your calculation here using vals array
...
从 main(),你可以简单地做:
Method m = new Method();
int perimeter;
m.calcPerimeter(<your_array_name>);
【讨论】:
这有点用,但几乎必然会引发其他问题:如何使用不同大小的数组?如何将参数值存储在实例中?如何在实例中存储可变数量的参数? @jester。非常感谢您的建议【参考方案2】:由于您正在编写 C++,因此您应该尽量避免使用 C 样式的数组。我会这样做
Method method;
int main()
vector<vector<int> > storeXandY(4);
for(int i=0; i!=4; ++i) storeXandY[i].resize(2);
for(int i=1;i<5;i++)
cout << "Please enter x-ordinate" << i<< endl;
cin>>storeXandY[i-1][0]; /* you need i-1 here, not i */
cout << "Please enter y-ordinate" << i << endl;
cin>>storeXandY[i-1][1];
method.calcPerimeter(storeXandY);
method::calcPerimeter
声明如下
your_return_type method::calcPerimeter(const vector<vector<int> >& rectangle);
使用向量的好处是可以通过调用它们的size
成员函数来获取它们持有的元素个数,这样在上面的代码中storeXandY.size()
等于4,storeXandY[0].size()
等于2。
【讨论】:
以上是关于将二维数组传递给另一个类 C++的主要内容,如果未能解决你的问题,请参考以下文章