【问题标题】:Copy constructor Class instantiation复制构造函数类实例化
【发布时间】:2010-02-19 05:10:50
【问题描述】:

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

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

这里缺少什么?还是拷贝构造函数的概念本身就不同?

【问题讨论】:

    标签: java oop copy-constructor


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      public TestCopyConst()
          {
      
          }
      

      或者需要i

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

      然后,您可以简单地这样做:

      TestCopyConst testCopyConst = new TestCopyConst();
      

      或者这个:

      TestCopyConst testCopyConst = new TestCopyConst(7);
      

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          '拷贝构造函数的概念是 本身有什么不同?'

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

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

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

          【讨论】:

          • 关于第二点,我只是想体验一下复制构造函数以了解它到底是什么。
          • 好吧,这在 Java 中什么都不是,所以忘了它吧。
          【解决方案5】:

          你需要

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

          【讨论】:

            猜你喜欢
            • 2023-03-04
            • 2016-07-05
            • 1970-01-01
            • 1970-01-01
            • 2013-06-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多