这是我的类,它实现了复制构造函数
public class TestCopyConst
{
public int i=0;
public TestCopyConst(TestCopyConst tcc)
{
this.i=tcc.i;
}
}
我试图在我的主方法
中为上面的类创建一个实例TestCopyConst testCopyConst = new TestCopyConst(?);
我不确定我应该作为参数传递什么。如果我必须传递一个TestCopyConst实例,那么我必须再去“new”,这反过来会再次提示参数
TestCopyConst testCopyConst = new TestCopyConst(new TestCopyConst(?));
这里缺少什么?或者复制构造函数的概念本身就有所不同?
答案 0 :(得分:4)
你错过了一个不是复制构造函数的构造函数。复制构造函数复制现有对象,您需要另一种方法来创建它们。只需创建具有不同参数和不同实现的另一个构造函数。
答案 1 :(得分:2)
您还需要实现一个无参数构造函数:
public TestCopyConst()
{
}
或者需要i
:
public TestCopyConst(int i)
{
this.i = i;
}
然后,你可以这样做:
TestCopyConst testCopyConst = new TestCopyConst();
或者这个:
TestCopyConst testCopyConst = new TestCopyConst(7);
通常,您的类将具有默认的无参数构造函数;当你实现自己的构造函数时,这就不再是这种情况了(假设这是Java,它看起来像)。
答案 2 :(得分:1)
您可以使用复制构造函数作为重载构造函数来克隆对象,但您还需要另一个构造函数来以正常方式初始化实例:
public class TestCopyConst
{
public int i=0;
public TestCopyConst(int i)
{
this.i = i;
}
public TestCopyConst(TestCopyConst tcc)
{
this.i=tcc.i;
}
}
答案 3 :(得分:1)
'复制构造函数的概念是 本身有什么不同?'
Java没有C ++拥有它们的复制构造函数,即由编译器自动生成和/或调用的复制构造函数。您可以自己定义一个,但只有在您调用它时才有用。不一样,用长粉笔。
我不确定我应该作为参数传递什么。如果我必须传递一个TestCopyConst实例,那么我必须再去“new”,这反过来会再次提示参数
这里你证明了这一点。您可以传递给复制构造函数的唯一事情是同一个类(或派生类...)的另一个实例。如果您没有要复制的其他实例,为什么您认为您需要复制构造函数?
答案 4 :(得分:0)
你需要
public class TestCopyConst
{
public int i=0;
public TestCopyConst(TestCopyConst tcc)
{
this.i=tcc.i;
}
public TestCopyConst(int val)
{
i = val;
}
//or
public TestCopyConst()
{
}
}