public class Program {
IntegSet i1, i2, i3, i4;
i1 = new IntegSet();
i2 = new IntegSet(1,2,5);
i3 = new IntegSet();
i4 = new IntegSet(i2);
}
我的程序是关于制作整数集。
public class IntegSet{
private final int MAXALLOWEDSETVALUE=2000;
private boolean [] data = new boolean[MAXALLOWEDSETVALUE+1];
我有一个第一个功能,我认为没关系。
public IntegSet(int... elts) {
int index = 0;
for(int iteration = 0; iteration < elts.length; iteration++) {
index = elts[iteration];
data[index] = true;
}
}
但是这个功能
呢public IntegSet(IntegSet source){
this.data = source.data;
}
这是复制构造函数吗?我对它的工作方式有些困惑。以及它与此功能的不同之处:
public void setTo(IntegSet source){}
我应该在哪里称呼它:
i3.setTo(i3.subtract(i1))
谢谢
复制构造函数是一个允许您制作现有对象的对象的构造函数。
我认为您可能有原始问题中的错别字,但我猜您是在问:
:public IntegSet(IntegSet source){
this.data = source.data;
}
是复制构造函数。
复制构造函数和public void setto(intset源){}
是,您的Setto函数实际上对您的源输入参数没有任何作用。它根本不会创建一个新对象。它甚至没有分配给调用对象的引用。
i3 = i1;
这将设置i1的引用等于i3的引用。现在,对I3数据进行的任何更改也会影响I1和Visa-vessa。
i3 = new integset(i1);
这将使用复制构造函数创建I1的副本,并允许在每个对象(I1和I3)中独立更改数据成员。
复制构造函数中的内部代码应使用数组克隆函数,例如:
this.data = source.data.clone();