C++/Java/C# Edit

それぞれ、似て非なる仕様やキーワードが存在するため、その概要をまとめる。
仕様の詳細や具体的なコーディング方法等は、別途書籍等を参照すること。

言語仕様言語別比較
C++JavaC#
全般エントリポイントmain()
WinMain()
DllMain()
main()Main()
代表的なライブラリC標準ライブラリ
STL
MFC/ATL/WTL (MS社製)
標準クラスライブラリ.NET Framework SDK
プリプロセッサありなしあり
代表的なコンパイラのコマンドcl
aaa
javaccsc
実行バイナリ機械語JVM用のバイトコード.NET Frameworkのマネージドコード
必須の実行環境なしJRE.NET Framework
コメントドキュメンテーションなし
※doxegen などサードパーティ製アプリを利用する
javadocXML document
ソースコード大文字/小文字の区別区別する区別する区別する
Unicode/非Unicode非UnicodeUnicodeUnicode
プリミティブ型型なしvoidvoidvoid
論理型boolbooleanbool
符号付き整数型1Byte : signed char
2Byte : short, int
4Byte : int, long
8Byte : int, long
※処理系によって異なる
1Byte : byte
2Byte : short
4Byte : int
8Byte : long
1Byte : sbyte
2Byte : short
4Byte : int
8Byte : long
符号なし整数型1Byte : unsigned char
2Byte : unsigned short, unsigned int
4Byte : unsigned int, unsigned long
8Byte : unsigned int, unsigned long
※処理系によって異なる
なし1Byte : byte
2Byte : ushort
4Byte : uint
8Byte : ulong
浮動小数点型4Byte : float
8Byte : double
4Byte : float
8Byte : double
4Byte : float
8Byte : double
10進小数型なしなしdecimal
文字型1Byte : char
2Byte : wchar_t
2Byte : char2Byte : char
文字列型なし
※組込型ではないが、ライブラリによってstd::stringクラスが提供される。
なし
※組込型ではないが、ライブラリによってjava.lang.Stringクラスが提供される。
string
プリミティブ型をオブジェクトと見なすか見なさない。見なさない。
ただし、各型に対応したラッパークラスが用意されている
見なす。
ボクシング/アンボクシングという仕組みにより自動変換される
リテラル整数値の表記法なし : 10進数
0~ : 8進数
0x~ : 16進数
(大文字小文字を問わない)
なし : 10進数
0~ : 8進数
0x~ : 16進数
(大文字小文字を問わない)
なし : 10進数
0x~ : 16進数
(大文字小文字を問わない)
小数値の表記法X.X : 通常表記
X.Xe±X : 指数表記
(大文字小文字を問わない)
X.X : 通常表記
X.Xe±X : 指数表記
(大文字小文字を問わない)
X.X : 通常表記
X.Xe±X : 指数表記
(大文字小文字を問わない)
整数値のサフィックスなし : signed int
U : unsigned int
L : signed long
UL : unsigned long
(大文字小文字を問わない)
なし : int
L : long
(大文字小文字を問わない)
なし : int
U : uint
L : long
UL : ulong
(大文字小文字を問わない)
小数値のサフィックスなし : double
F : float
L : long double
(大文字小文字を問わない)
F : float
D : double
(大文字小文字を問わない)
なし : double
F : float
D : double
M : decimal
(大文字小文字を問わない)
文字'A''A''A'
文字列"~""~""~"
文字列(非エスケープ)なしなし@"~"
ヌルNULL
※実体は、0や、(void *)0
nullnull
演算子順次,なし,
式優先()()()
符号+
-
+
-
+
-
算術+
-
*
/
%
+
-
*
/
%
+
-
*
/
%
※剰余演算子は浮動小数点型にも使用できる
代入=
+=
-=
*=
/=
%=
<<=
>>=
&=
|=
^=
=
+=
-=
*=
/=
%=
<<=
>>=
&=
|=
^=
=
+=
-=
*=
/=
%=
<<=
>>=
&=
|=
^=
インクリメント/デクリメント
(前置/後置)
++
--
++
--
++
--
比較==
!=
<
>
<=
>=
==
!=
<
>
<=
>=
==
!=
<
>
<=
>=
論理(ショートサーキット*1評価)&&
||
&&
||
&&
||
論理(非ショートサーキット評価)なし&
|
&
|
否定!!!
ビット&
|
^
&
|
^
&
|
^
シフト<<
>>
※算術/論理は既定されていない
<<
>>  算術シフト
>>> 論理シフト
<<
>>
※オペランドの型の符号の有無によって算術/論理が決定する
条件(三項演算)?:?:?:
型変換(キャスト)()
dynamic_cast<>
static_cast<>
const_cast<>
reinterpret_cast<>
()()
関数呼び出し()()()
添字[][][]
参照*
&
なし*
メモリ割当new
delete
new[]
delete[]
newnew
sizeofsizeofなしsizeof
メンバアクセス.
->
.*
->*
..
スコープ解決::
::*
..
型検査なしinstanceofis
as
実行時型情報typeidなしtypeof
その他なしなしchecked
unchecked
型修飾子定数値const
#define
finalconst
#define
配列一次元配列[][][]
多次元配列[][]なし
※ジャグ配列を利用する必要あり
[ , ]
配列をオブジェクトとして扱うか扱わない扱う
lengthプロパティで要素数を取得できる。
扱う
Lengthプロパティで要素数、Rankプロパティで次元数を取得できる。
多次元配列のn次元目の要素数は、GetLength()メソッドで取得する。
制御文条件分岐if-else
switch-case
if-else
switch-case
if-else
switch-case
※フォールスルー*2禁止(各case節でbreak必須)
ループfor
while
do-while
for
while
do-while
for
while
do-while
ループ(for-each)なしfor( : )foreach
ジャンプbreak
continue
goto
return
break
continue
goto
return
break
continue
goto
return
例外try-catch-finally
throw
try-catch-finally
throw
throws
try-catch-finally
throw
メモリ管理ガーベージコレクション(GC)なしありあり
※locked/unlockedで制御可能
ポインタ操作使用可なしunsafeコードにより使用可
参照型&演算子により明示的に使用するデフォルトで参照型が使用されるデフォルトで参照型が使用される
関数デフォルト引数あり
オーバーロードの際、関数のシグネチャが曖昧になることで問題が発生する場合がある。
なしあり
オーバーロードの際、関数のシグネチャが曖昧になることで問題が発生する場合がある。
名前付き引数なしなしあり
可変長引数あり
...キーワードと、stdarg.hを使用。
あり
...キーワードを使用。
あり
params キーワードを使用。
関数ポインタ(コールバック、イベントの実装)関数ポインタを使用通常、イベントリスナというインタフェースを使用するデリゲート、イベントを使用
OOP構造体struct
メンバにデフォルトで適用されるアクセス修飾子がpublicとなること以外は、クラスと同じ。(クラスの場合はデフォルトでprivateとなる)
なしstruct
クラスは参照型のデータになり、構造体は値型のデータとなる。それ以外にも継承が禁止されているなど、クラスとは異なるものとして扱われる。
クラスclassclassclass
インタフェースなし
全て純粋仮想関数で構成されるクラスで代用
interfaceinterface
全てのクラスの基底となるオブジェクト型なしObjectクラス
※組込型ではなく、ライブラリによって提供される
objectクラス
コンストラクタありありあり
デストラクタあり
GCが存在しないので積極的に使用することになる。
なし
代わりにファイナライザが存在するが、GCでのメモリ解放のタイミングに呼ばれるため、呼び出されるタイミングを正確に知ることができず、通常使用しない。
あり
定義すると、object.Finalize()のオーバーライドを行ったことになる。
Javaと同じ理由で通常使用しない。
多重継承許可
ただしインタフェースの多重実装に相当するコード以外は推奨されない
禁止
ただしインタフェースの多重実装は許可
禁止
ただしインタフェースの多重実装は許可
継承不可修飾子なしfinal
sealed
final
sealed
派生クラスから基底クラスへのアクセス可能だが専用のキーワードはなしsuperbase
非仮想メソッドデフォルトfinalfinal
派生クラスで同名メソッドを定義して隠蔽を行う場合は、明示的に new を指定することが推奨される。
仮想メソッドvirtualデフォルトデフォルト
抽象(純粋仮想)メソッドvirtual xxx() = 0;abstructabstruct
プロパティなし
明示的にgetter/setterを用意し、その関数を呼び出す必要がある。
なし
明示的にgetter/setterを用意し、その関数を呼び出す必要がある。
get/setアクセサによって実現可能。
呼び出し側からは変数の値の代入のように使用できる。
オーバーライド特にキーワードなし特にキーワードなしoverride
演算子オーバーロード可能可能可能
[]演算子については、インデクサで定義する。
アクセス修飾子publicあらゆる位置からのアクセスを許可することを表す。すべてのクラスからアクセス可能。あらゆる位置からのアクセスを許可することを表す。
protectedクラス外部からのアクセスを拒否するがこのクラスの派生クラスからのアクセスを許可する。同一クラスと継承したクラスだけアクセス可能(同一パッケージの場合、アクセス可能)クラス外部からのアクセスを拒否するがこのクラスの派生クラスからのアクセスを許可する。
privateクラスの外部からのアクセスを全て拒否する。このメンバには同一クラス内からのみアクセスできる。同一クラス内だけアクセス可能クラスの外部からのアクセスを全て拒否する。このメンバには同一クラス内からのみアクセスできる。
internalなしなし現在のコンパイル単位(.NET Framework 特有)でのみアクセスを許可する。
他の修飾子と併用可能。
省略した場合デフォルトのアクセス修飾子が適用される。同一クラス内、同一パッケージからアクセス可能。デフォルトのアクセス修飾子が適用される。
その他列挙型enum
各列挙子はint型の値として扱われる。
enum
クラスの一種として扱われる。
各列挙子はオブジェクトとして扱われる。
enum
値として扱われる。列挙子の型を明示的に指定可能。
ジェネリックプログラムテンプレートジェネリクスジェネリクス
マルチスレッドAPIを使用して実現する。
Win32APIでは、CreateThread()を使用する。
標準クラスライブラリで用意されている。
java.lang.Threadクラスを継承する、またはjava.lang.Runnableインタフェースを実装する。
.NET Frameworkで用意されている。
System.Threading.Threadクラスを使用する。

*1 論理式の一部を評価した段階で結果が決定されるとき、残りの式を評価しないこと
*2 breakを書かないことで次のcase節へ処理を移らせること

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-05-26 (土) 13:11:12 (2180d)