4

这是我实现复制构造函数的类

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(?));

这里缺少什么?或者复制构造函数的概念本身是不同的?

4

5 回答 5

4

您缺少一个不是复制构造函数的构造函数。复制构造函数复制现有对象,您首先需要另一种方法来制作它们。只需创建另一个具有不同参数和不同实现的构造函数。

于 2010-02-19T05:12:58.600 回答
2

您还需要实现一个无参数构造函数:

public TestCopyConst()
    {

    }

或者需要一个i

public TestCopyConst(int i)
    {
        this.i = i;
    }

然后,您可以简单地执行以下操作:

TestCopyConst testCopyConst = new TestCopyConst();

或这个:

TestCopyConst testCopyConst = new TestCopyConst(7);

通常,您的类将有一个默认的无参数构造函数;当您实现自己的构造函数时,情况就不复存在了(假设这是 Java,它看起来像)。

于 2010-02-19T05:14:24.807 回答
1

您将使用复制构造函数作为重载构造函数来克隆对象,但您还需要另一个构造函数以正常方式初始化实例:

public class TestCopyConst
{
    public int i=0;

    public TestCopyConst(int i)
    {
       this.i = i;
    }

    public TestCopyConst(TestCopyConst tcc)
    {
       this.i=tcc.i;
    }
}
于 2010-02-19T05:14:49.620 回答
1

“复制构造函数的概念本身就不同吗?”

Java 不像 C++ 那样拥有复制构​​造函数,即由编译器自动生成和/或调用。您可以自己定义一个,但只有在调用它时才有用。不一样的东西,用长粉笔。

我不确定我应该作为参数传递什么。如果我必须传递一个 TestCopyConst 的实例,那么我必须再次选择“new”,这又会再次提示输入参数

在这里你证明了这一点。唯一可以传递给复制构造函数的是同一类(或派生类...)的另一个实例。如果您没有要复制的另一个实例,为什么您认为根本需要一个复制构造函数?

于 2010-02-19T09:08:12.587 回答
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()
    {
    }
} 
于 2010-02-19T05:15:55.387 回答