Копировать конструктор класса - PullRequest
4 голосов
/ 19 февраля 2010

Вот мой класс, который реализует конструктор копирования

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

Я пытался создать экземпляр для вышеуказанного класса в моем методе main

TestCopyConst testCopyConst = new TestCopyConst(?);

Я не уверен, что я должен передать в качестве параметра. Если мне нужно передать экземпляр TestCopyConst, то мне снова нужно перейти к «new», который в свою очередь снова запросит параметр

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

что здесь не хватает? или сама концепция конструктора копирования - это нечто иное?

Ответы [ 5 ]

4 голосов
/ 19 февраля 2010

Вам не хватает конструктора, который не является конструктором копирования. Конструктор копирования копирует существующие объекты, вам нужен еще один способ их создания. Просто создайте другой конструктор с другими параметрами и другой реализацией.

2 голосов
/ 19 февраля 2010

Вам также нужно реализовать конструктор без аргументов:

public TestCopyConst()
    {

    }

Или тот, который принимает i:

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

Тогда вы можете просто сделать это:

TestCopyConst testCopyConst = new TestCopyConst();

Или это:

TestCopyConst testCopyConst = new TestCopyConst(7);

Обычно ваш класс будет иметь конструктор по умолчанию без аргументов; это перестает быть тем случаем, когда вы реализуете свой собственный конструктор (при условии, что это Java, как это выглядит).

1 голос
/ 19 февраля 2010

'концепция конструктора копирования сама по себе является чем-то другим?'

В Java нет конструкторов копирования так, как в C ++, то есть они генерируются автоматически и / или вызываютсякомпилятором.Вы можете определить его самостоятельно, но он имеет смысл только в том случае, если вы его называете.Не то же самое, длинным мелом.

Я не уверен, что я должен передать в качестве параметра.Если мне нужно передать экземпляр TestCopyConst, то мне снова нужно перейти к «new», который, в свою очередь, снова запросит параметр

Здесь вы доказываете точку.Единственное, что вы можете передать конструктору копирования, - это другой экземпляр того же класса (или производного класса ...).Если у вас нет другого экземпляра для копирования, почему вы думаете, что вообще нужен конструктор копирования?

1 голос
/ 19 февраля 2010

Вы бы использовали конструктор копирования в качестве перегруженного конструктора для клонирования объекта, но вам также нужен другой конструктор для инициализации экземпляра обычным способом:

public class TestCopyConst
{
    public int i=0;

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

    public TestCopyConst(TestCopyConst tcc)
    {
       this.i=tcc.i;
    }
}
0 голосов
/ 19 февраля 2010

Вам нужно

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