【问题标题】:Translate C++ Constructor into Java将 C++ 构造函数翻译成 Java
【发布时间】:2010-10-28 23:12:49
【问题描述】:

我正在将一个小程序包从 C++ 翻译成 Java。我从来没有真正使用过 C++,所以有些语法有点神秘。特别是,我很难弄清楚与此等效的 Java 是什么:

file: SomeClass.cpp

SomeClass::SomeClass( BitStream* data, const char* const filename ) :
    data( data ), cipher( filename ), iv( new Botan::byte [cipher.BLOCK_SIZE] ),
    ivBitsSet( 0 ), keyMaterialRemaining( 0 ), keyMaterial( new Botan::byte [cipher.BLOCK_SIZE] ) {}

我很满意(在 Java 中):

public SomeClass{
  public SomeClass(InputStream data, String filename){

  }
}

但我不确定如何处理 C++ 中 : 之后的内容。它们是领域吗?可选参数?为琐碎的问题道歉,但在这方面与 Google 并没有取得太大进展......

【问题讨论】:

    标签: java c++ porting


    【解决方案1】:

    “:”之后的所有内容都称为成员初始化列表,在 C++ 中这是初始化此类成员的一种方式。例如,在您的代码中,“data”是 SomeClass 的成员,因此 Java 中的等价物将是构造函数主体中的简单赋值。

    this.data = data;
    

    等等。对于所有其他成员

    【讨论】:

      【解决方案2】:

      那些是field initializer lists。他们设置字段的初始值。

      Java 版本类似于

      public SomeClass{
        public SomeClass(InputStream data, String filename){
          //either set the field directly...
          this.data = data;
          //...or call the constructor, depending on the type
          this.cipher = new Cipher(filename);
        }
      }
      

      请注意,这不一定是简单的字段设置器,它们也可能是对字段类型构造函数的调用。

      【讨论】:

        【解决方案3】:

        cipher(filename) 等价于写cipher = filename;

        【讨论】:

        • 不是这样。但是 cipher=filename 与 Java 所能达到的 cipher(filename) 一样接近。
        【解决方案4】:

        这只是初始化所有类成员的 C++ 方式。

        【讨论】:

          猜你喜欢
          • 2022-01-09
          • 1970-01-01
          • 2021-04-01
          • 1970-01-01
          • 2016-08-04
          • 2014-01-06
          • 2011-12-09
          • 1970-01-01
          相关资源
          最近更新 更多