通过构造函数传递对象?

时间:2014-07-21 22:23:09

标签: c++

这是一个家庭作业问题。我试图通过构造函数传递一个对象来创建一个双重值的新对象。该对象是一个int数组,具有上下索引和大小。我不确定是否只是将私有变量的值更改为* 2,或者我是否完全遗漏了某些内容。

这是我的班级标题:

const int SIZE = 100;

class intArray{
private:
    int iArray[SIZE];
    int arrLower, arrUpper;
    int size;

public:
    intArray();
    intArray(int size);
    intArray(int lower, int upper);
    intArray(intArray& input);
    int high();
    int low();
    int& operator[] (int size)             {  return iArray[size];  }

};

到目前为止我所拥有的所有构造函数:

intArray::intArray(intArray& input){

    input.iArray[size] *= 2;
    input.size *= 2;
    input.arrUpper *= 2;
    input.arrLower *= 2;

}

我甚至不确定是否正确。

3 个答案:

答案 0 :(得分:5)

intArray::intArray(intArray& input){

    input.iArray[size] *= 2;
    input.size *= 2;
    input.arrUpper *= 2;
    input.arrLower *= 2;

}

这是不正确的。

由于您使用input.作为前缀,因此您正在修改原始内容,而不是您想要的内容。只需复制所有旧值,但乘以2

intArray::intArray(intArray& input){

    for(int i = 0; i < size; i++) {
        iArray[i] = input.iArray[i] * 2; //set this array to 2x the input array
    }
    size = input.size * 2;
    arrUpper = input.arrUpper * 2;
    arrLower = input.arrLower * 2;

}

虽然这样做有点工作,但数组大小相同,但size乘以2,这是错误的。我不确定你的班级到底应该做什么,但我可以告诉你它没有多大意义。什么是arrUpperarrLower?如果你回答,我可以帮你一些。

这是一个更有意义的,但我仍然不知道你的一些变量是什么意思。

intArray::intArray(intArray& input){
    size = input.size; //keep this the same
    for(int i = 0; i < size; i++) {
        iArray[i] = input.iArray[i] * 2; //set this array to 2x the input array
    }
    arrUpper = input.arrUpper; //what is this even?
    arrLower = input.arrLower;

}

答案 1 :(得分:2)

如果必须保持传递的对象不变,则将其传递给const&。然后,您应该修改当前对象的数据成员,参数(如果您尝试它,则会收到错误)。

intArray::intArray(intArray const& input) {
    for (int i = 0; i < size; i++) {
        iArray[i] = 2 * input.iArray[i];
    }

    size = 2 * input.size;
    arrUpper = 2 * input.arrUpper;
    input.arrLower = 2 * input.arrLower;
}

答案 2 :(得分:1)

好像你已经定义了你的拷贝构造函数(intArray :: intArray(intArray&amp;))。您要做的是在数组元素的复制构造函数中执行深层复制。

intArray::intArray(intArray& input)
{

    for(int i=input.low(); i<=input.hig(); ++i)
    {
        iArray[i] = input.iArray[i]*2;
    }
}