这是一个家庭作业问题。我试图通过构造函数传递一个对象来创建一个双重值的新对象。该对象是一个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;
}
我甚至不确定是否正确。
答案 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,这是错误的。我不确定你的班级到底应该做什么,但我可以告诉你它没有多大意义。什么是arrUpper
和arrLower
?如果你回答,我可以帮你一些。
这是一个更有意义的,但我仍然不知道你的一些变量是什么意思。
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;
}
}