繁体   English   中英

通过构造函数传递对象?

[英]Passing an object through a constructor?

这是一个家庭作业问题。 我试图通过构造函数传递一个对象来创建一个双重值的新对象。 该对象是一个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;

}

我甚至不确定是否正确。

intArray::intArray(intArray& input){

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

}

这是不正确的。

因为你用input.前缀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是由两个,这是错误的成倍增加。 我不确定你的班级到底应该做什么,但我可以告诉你它没有多大意义。 什么是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;

}

如果必须保持传递的对象不变,则通过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;
}

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

intArray::intArray(intArray& input)
{

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM