Pergunta

Aqui está minha classe que implementa o construtor de cópias

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

Eu tentei criar uma instância para a classe acima no meu método principal

TestCopyConst testCopyConst = new TestCopyConst(?);

Não tenho certeza do que devo passar como parâmetro. Se eu tiver que passar em uma instância do testCopyConst, novamente eu tenho que ir para "Novo", que por sua vez solicitará novamente o parâmetro

TestCopyConst testCopyConst = new TestCopyConst(new TestCopyConst(?));

O que está faltando aqui? Ou o conceito de construtor de cópias é algo diferente?

Foi útil?

Solução

Você está perdendo um construtor que não é um construtor de cópias. O construtor de cópias copia os objetos existentes, você precisa de outra maneira de fazê -los em primeiro lugar. Basta criar outro construtor com parâmetros diferentes e uma implementação diferente.

Outras dicas

Você também precisa implementar um construtor não-Arg:

public TestCopyConst()
    {

    }

Ou um que leva um i:

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

Então, você pode simplesmente fazer isso:

TestCopyConst testCopyConst = new TestCopyConst();

Ou isto:

TestCopyConst testCopyConst = new TestCopyConst(7);

Normalmente, sua classe terá um construtor padrão sem arg; Isso deixa de ser o caso quando você implementa um construtor próprio (supondo que este seja Java, o que parece).

Você usaria um construtor de cópia como um construtor sobrecarregado para clonar um objeto, mas também precisa de outro construtor para inicializar uma instância de uma maneira normal:

public class TestCopyConst
{
    public int i=0;

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

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

'O conceito de construtor de cópias é algo diferente?'

O Java não possui construtores de cópia na maneira como o C ++ os possui, ou seja, que são gerados automaticamente e/ou chamados pelo compilador. Você pode definir um você mesmo, mas só tem um uso se vocês chame-o. Não é a mesma coisa, por um giz longo.

Não tenho certeza do que devo passar como parâmetro. Se eu tiver que passar em uma instância do testCopyConst, novamente eu tenho que ir para "Novo", que por sua vez solicitará novamente o parâmetro

Aqui você está provando o ponto. A única coisa que você pode passar para um construtor de cópias é outra instância da mesma classe (ou classe derivada ...). Se você não tem outra instância para copiar, por que você acha que precisa de um construtor de cópias?

Você precisa

public class TestCopyConst 
{ 
    public int i=0; 
    public TestCopyConst(TestCopyConst tcc) 
    { 
       this.i=tcc.i; 
    } 
    public TestCopyConst(int val)
    {
       i = val;
    }
    //or
    public TestCopyConst()
    {
    }
} 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top