Перевести конструктор C++ на Java

Я работаю над переводом небольшого пакета с 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){

  }
}

но я не уверен, что делать с вещами после : в С ++. Это поля? Необязательные параметры? Извиняюсь за тривиальный вопрос, но не зашел с Google на этом...

4 ответа

Решение

Все после ":" называется списком инициализации членов, в C++ это один из способов инициализации членов этого класса. Например, из вашего кода "data" является членом SomeClass, поэтому эквивалентом в Java будет простое присваивание в теле конструктора.

this.data = data;

и т. д. для всех остальных членов

Это списки инициализаторов полей. Они устанавливают начальные значения для полей.

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);
  }
}

Обратите внимание, что это не обязательно простые установщики полей, они также могут быть вызовами конструктора типа поля.

cipher(имя файла) эквивалентно записи cipher = имя файла;

Это просто способ C++ для инициализации всех членов класса.

Другие вопросы по тегам