2010-10-28 118 views
4

我正在將一個小包從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){ 

    } 
} 

,但我不知道是什麼在C++中使用:之後的東西。他們是田地嗎?可選參數?道歉的微不足道的問題,但與Google沒有太大關係......

回答

10

「:」之後的所有內容都稱爲成員初始化列表,在C++中,這是初始化此類成員的一種方法。例如,在你的代碼中,「data」是SomeClass的成員,所以Java中的等價物將是構造函數體中的一個簡單賦值。

this.data = data; 

等的所有其他成員

1

這就是C++初始化所有類成員的方法。

2

密碼(文件名)是相當於寫入加密文件名=;

+2

並非如此。但是cipher = filename與Java可以達到密碼(文件名)的距離相近。 – 2010-10-28 15:13:34

4

那些是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); 
    } 
} 

注意,這不一定是簡單的現場制定者,他們也可能對字段類型的構造函數調用。