如何在C ++中使用构造函数将Int数组复制到int指针

时间:2018-09-06 06:40:48

标签: c++

我正在尝试将int数组x插入int * v。这是我的代码。请为我提供最佳解决方案及其背后的原因。

此行中有错误。与其复制数组值,不如将其取为垃圾值。第v1 = x行;

class vector
{
    int *v;
    int size;
public:
    vector(int m)
    {
        v = new int[size = m];
        for (int i = 0; i < size; i++)
            v[i] = 0;
    }
    vector(int *a)
    {

        for (int i = 0; i < size; i++)
            v[i] = a[i];
    }

    int operator *(vector &y)
    {
        int sum = 0;
        for (int i = 0; i < size; i++)
            sum += v[i] * y.v[i];
        return sum;
    }
    void disp()
    {
        for (int i = 0; i < size; i++)
            cout << v[i] << " ";
        cout << "\n";

    }
};
int main()
{
    clrscr();
    int x[3] = { 1,2,3 };
    int y[3] = { 4,5,6 };
    vector v1(3);
    //v1.disp();
    vector v2(3);
    v2.disp();
    v1 = x;
    v1.disp();
    //v2=y;
    v2.disp();
    int r = v1 * v2;
    cout << "R = " << r;
    getch();
    return 0;
}

2 个答案:

答案 0 :(得分:1)

您忘记在vector类中添加赋值运算符:

  vector & operator=(int *a)
  {
    for (int i = 0; i < size; i++)
      v[i] = a[i];

    return *this;
  }

答案 1 :(得分:0)

在线

v1=x;

可能是,您希望它调用第二个构造函数,该构造函数以int*作为参数。但这不会发生。

可以看作是从基本类型到类类型的类型转换。我们希望可以调用适当的构造函数。
参见http://www.hexainclude.com/basic-to-class-type-conversion/

但是请记住,构造函数在对象创建后将仅被调用一次。

在此行

vector v1(3);

第一个构造函数已经被调用。然后一行

v1=x;

现在不会调用第二个构造函数。

对于每个类,=运算符默认为重载。这就是为什么我们可以轻松地将对象彼此分配的原因。

因此,行v1=x调用默认的重载赋值=运算符。 在这里,它将数组x的地址,即&x[0]视为类对象的地址。由于它不是vector class对象的地址

=>会导致分段错误

您的答案

要将int数组分配给int pointer,即int* v的成员变量vector class

    类内的
  1. 重载赋值运算符=

  1. 初始化类对象以在第一行本身中进行数组。即

vector v1=x; // modify the class constructor to have size as a constant.