#author("2018-05-26T13:11:12+09:00","default:mat2umoto","mat2umoto")
*C++/Java/C# [#t1af8fff]
それぞれ、似て非なる仕様やキーワードが存在するため、その概要をまとめる。~
仕様の詳細や具体的なコーディング方法等は、別途書籍等を参照すること。~


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


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS