如何将数组传递到C 的类中

How to pass an Array into a Class in C++

本文关键字:数组      更新时间:2023-10-16

创建类时,我希望能够将数组存储在该类中。这可能吗?

例如。如果我有一个名为Array的课程来存储从我的主函数中存储一个数组

int main()
{
    double nums[3] = {1 2 3}
    array Vnums(nums) 
    return 0
}
class array
{
    public
    //constructor
        array(double nums[])
        {
            double vector[] = nums;
        }// end constructor
}// end array

谢谢!

使用std::array代替原始数组。就像一个原始数组一样,但可以交配,并且具有有用的成员功能。

class array
{
    std::array<double, 3> classArray;
    public:
    //constructor
        explicit array(const std::array<double, 3>& rhs) 
        :classArray(rhs)
        {}// end constructor
}// end array

int main()
{
    std::array<double, 3> nums = {{1 2 3}};
    array Vnums(nums) 
    return 0
}

std::vector,如果您想能够随意更改大小

class array
{
    std::vector<double> classArray;
    public:
    //constructor
        explicit array(const std::vector<double>& rhs) 
        :classArray(rhs)
        {}// end constructor
}// end array

int main()
{
    std::vector<double> nums{1 2 3}; //C++11 feature
    array Vnums(nums) 
    return 0
}

我不确定您在做什么,因此很难提供可靠的建议。您可以通过参考,指针和计数,迭代对...

传递原始数组

是的,但是您必须在创建类时动态分配数组,或者数组必须始终是相同的大小。

选项A:

class array{
private:
  double* data;
  unsigned size;
public:
  array(double* d, unsigned s){
    size = s;        
    data = new double[size];
    for(unsigned i = 0; i < s; i++) 
        data[i]=d[i];
  }
  array(const array& copy){
    double* temp = new double[copy.size];
    delete [] data;
    data = temp;
    size = copy.size;
    for(unsigned i = 0; i < size; i++) 
        temp[i]=copy.data[i];    
  }
  array& operator= (const array& copy){
    double* temp = new double[copy.size];
    delete [] data;
    data = temp;
    size = copy.size;
    for(unsigned i = 0; i < size; i++) data[i]=copy.data[i];
  }
  ~array(){
    delete[] data; // Don't forget the destructor!
  }
};

这可能是您需要的方式,但是请注意,您几乎可以肯定需要自定义复制构造函数和分配运算符,以便您在此类的多个实例之间不共享任何内存。更好的方法可能是制作两者都可以使用的复制函数。

选项B:

class array{
private:
  double data[3];
public:
  array(double* d){ //or "double(&d)[3]" to be safer, but less flexible
    for(unsigned i = 0; i < 3; i++){
      data[i] = d[i]; // If d is not at least size 3, your program will crash here (or later on, or maybe just act in an undefined way) 
    }
  }
}

尚未对此进行测试,但这应该是一个可以的起点。