Перевести конструктор 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);
}
}
Обратите внимание, что это не обязательно простые установщики полей, они также могут быть вызовами конструктора типа поля.