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 に答える