C++ と Java:違いは何ですか?
C++ 言語とは?
C++ は、C プログラミング言語と Simula67 (最初のオブジェクト指向言語) の機能を備えたコンピューター プログラミング言語です。 C++ は、クラスとオブジェクトの概念を導入しました。
高水準および低水準の言語機能をカプセル化します。そのため、中級レベルの言語と見なされます。以前は、C 言語のすべての特性を備えていたため、「C with classes」と呼ばれていました。
Java 言語とは?
Java は、Sun Microsystems によって開発されたプログラミング言語です。小さなソフトウェア開発チームがこの言語を開発しました。彼らは、1991 年に Java 言語を開始したグリーン チームとして知られていました。
C++ の歴史
C++ 言語は、AT &T Bell Laboratories の Bjarne Stroustrup によって開発されました。 Stroustrup は C の強力な支持者であり、Simula67 の崇拝者でもありました。彼は、両方の言語の長所を組み合わせたいと考えていました。彼は、オブジェクト指向プログラミング機能をサポートし、C の力を維持する言語を作成することを目指していました。その結果、C++ が生まれました。
Java の歴史
Java 言語は当初、OAK と呼ばれていました。もともとは、デバイスやセットトップ ボックスを扱うために開発されました。オークは大失敗でした。そのため、1995 年に Sun は名前を Java に変更し、急成長している World Wide Web 開発ビジネスを利用するために言語を変更しました。
その後、2009 年に Oracle Corporation が Sun Microsystems を買収し、Java と Solaris という 2 つの主要な Sun ソフトウェア資産の所有権を取得しました。
主な違い:
- C++ はコンパイラのみを使用しますが、Java はコンパイラとインタープリタの両方を使用します。
- C++ は演算子のオーバーロードとメソッドのオーバーロードの両方をサポートしていますが、Java はメソッドのオーバーロードのみをサポートしています。
- Java には自動ガベージ コレクションが組み込まれているのに対し、C++ は new キーワードと delete キーワードを使用して手動のオブジェクト管理をサポートしています。
- C++ は構造体をサポートしていますが、Java は構造体をサポートしていません。
- C++ はユニオンをサポートしていますが、Java はユニオンをサポートしていません。
<センター>
<図> フィギュア>センター>
C++ と Java の違い
パラメータ | C++ | Java |
---|---|---|
関係 | クラス名とファイル名の間に厳密な関係はありません。 C++ では、特定のクラスに対してヘッダー ファイルと実装ファイルが使用されます。 | 厳密な関係が適用されます。たとえば、クラス PayRoll のソース コードは PayRoll.java にある必要があります。 |
入力メカニズム | I/O ステートメントは in と cout を使用します。たとえば in » x; cout« y; | I/O 入力メカニズムは、一度に 1 バイト (System.in) を読み取るため、非常に複雑です。出力は簡単です。 System.out.println(x); |
コンパイラとインタプリタ | C++ のみサポートするコンパイラ | Java はコンパイラとインタープリタの両方をサポートします |
他の言語との互換性 | 一部の例外を除いて、C ソース コードと互換性があります。 | 以前の言語との下位互換性はありません。構文は C/C++ の影響を受けています。 |
アクセス制御とオブジェクト保護 | 常時保護可能な柔軟なモデル | 面倒なモデルは弱いカプセル化を助長します。 |
コンセプト | 一度書くとどこでもコンパイル | 一度書けばどこでも実行 |
プログラミング タイプのサポート | 手続き型プログラミングとオブジェクト指向プログラミングの両方が可能です。 | オブジェクト指向プログラミング モデルをサポートします。 |
インターフェース | ネイティブ システム ライブラリへの直接呼び出しを許可します。 | Java Native Interface と最近の Java Native Access を介してのみ呼び出す |
メモリ管理 | プログラマーがアクセス可能 | システム制御 |
ルート階層 | C++ にはそのようなルート階層はありません。 C++ は、手続き型プログラミングとオブジェクト指向プログラミングの両方をサポートしています。したがって、ハイブリッド言語と呼ばれます。 | Java は純粋なオブジェクト指向プログラミング言語です。それは。単一ルート階層に従う理由。 |
最高の機能 | C++ は、オブジェクト指向機能の手続き型プログラミング機能をサポートします。 | Java は自動ガベージ コレクションをサポートします。 C++ のようにデストラクタをサポートしていません。 |
Gotoステートメント | C++ には goto ステートメントがあります。ただし、goto ステートメントを使用するのは理想的ではありません。 | Java には goto ステートメントがありません。キーワード got と const は、使用されていなくても予約されています。 |
多重継承 | C++ は multipleInheritance を提供します。キーワード virtual は、多重継承中に問題があれば解決するために使用されます。 | Java は多重継承を提供しません。 |
スコープ解決演算子 | C++ にはスコープ解決演算子 (: :) があります これは、クラス外でメソッドを定義し、ローカル変数も同じ名前で存在するスコープからグローバル変数にアクセスするために使用されます。 | スコープ解決演算子なし (: :) Javaで。メソッド定義はクラス内で発生する必要があるため、スコープ解決の必要はありません。 |
サポート方法 | C++ は、メソッドのオーバーロードと演算子のオーバーロードの両方をサポートしています | Java はメソッドのオーバーロードのみをサポートします。演算子のオーバーロードはサポートされていません。 |
移植性 | プラットフォーム用にソースを再コンパイルする必要があります。したがって、コードは移植できません。 | バイトコード クラスは、プラットフォーム固有の JVM に転送できます。 |
型セマンティクス | プリミティブ型とオブジェクト型の間の一貫性。 | プリミティブ型とオブジェクト型では異なります。 |
ライブラリ | 主に低レベルの機能 | 高レベルのサービス向けの大規模なクラス |
実行時エラー検出 | プログラマの責任。 | システムの責任。 |
関数とデータ | 関数とデータは任意のクラスの外部に存在する可能性があり、グローバル スコープと名前空間スコープが利用可能です。 | すべての関数とデータはクラス内に存在します。パッケージスコープが利用可能です。 |
プラットフォーム | C++ プログラムはプラットフォームに依存します。特定のプラットフォーム用にコンパイルする必要があります。 | Java プログラムはプラットフォームに依存しません。 Java プログラムは、Java 仮想マシン (JVM) 用に作成されます。再コンパイルを必要とせずに実行されます。 |
実行時エラー検出 | C++ では、エラーをチェックするのはプログラマの責任です。 | プログラムのエラーをチェックするのはシステムの責任です。 |
ポインター | C++ サポート ポインター。 | Java はポインタの限定的なサポートのみを提供します。 |
構造 | 構造をサポートしています。 | 構造体はサポートしていません。 |
組合 | C++ は共用体をサポートしています。 | Java は共用体をサポートしていません。 |
オブジェクト管理 | C++ は、new キーワードと delete キーワードを使用して、手動のオブジェクト管理をサポートしています。 | Java は自動ガベージ コレクションに大きく依存しています。デストラクタはサポートしていません。 |
Java