0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CとC++とJavaの違い

Last updated at Posted at 2024-04-08

ごくごく簡単なまとめですが、CとC++とJava比較してみました。

項目 C C++ Java
誕生年 1972 1983 1995
分類 手続き型言語 オブジェクト指向型言語 オブジェクト指向型言語
変数宣言時の型指定 必要(静的型付け) 必要(静的型付け)  必要(静的型付け)
クラスの概念 なし あり あり
ファイル名とクラス名 クラスの概念なし 一致させる必要なし 一致していなければならない(内部クラス除く)
変数宣言時の初期値設定 (※3) (※3)  (※3)
複数戻り値 不可 不可 不可 
アクセス修飾子 なし あり(※1)※正確にはアクセス指定子と呼ばれる あり(※1)
文字列型 なし あり あり
文字列の比較 strcmp関数 strcmp関数 equalsメソッド
文字列の結合 strcat関数 strcat関数 +演算子
定数の宣言 const const final
do-while文 あり あり あり
仮引数のない関数(メソッド) voidまたは何も書かない voidまたは何も書かない 何も書かない
アドレス演算子 & & なし
拡張for文 なし あり(範囲for文と呼ばれる) あり
関数プロトタイプ宣言 あり あり なし
構造体 あり(※2) あり(※2) なし
クラスの継承構文 クラスの概念なし : extends
多重継承 クラスの概念なし  不可
switch構文 あり(値は整数型でないといけない) あり(値は整数型でないといけない) あり
ヘッダファイル あり あり なし
コンストラクタ なし あり あり
デストラクタ なし あり(※オーバーロードはできない) なし
論理型 bool (stdbool.hをinclude) bool boolean
例外処理構文 なし try-catch(finallyはない) try-catch-finally
ポインタ渡し 不可
参照渡し 不可 不可

(※1)アクセス修飾子の違い

Javaの場合、アクセス修飾子はメンバだけでなく、クラス自体にも付与できる。
C++の場合、アクセス修飾子ではなくアクセス指定子と呼ばれる。
C++の場合、クラス、構造体自体にアクセス指定子を付与することはできない。
またC++の場合、構造体のメンバのデフォルトはpublic、クラスのメンバのデフォルトはprivateになる。

(※2)CとC++の構造体の違い

struct StructA {
	int n;
	double d;
};

という構造体があるとする。

Cの場合はstructを省略することはできない。

struct StructA sa;

C++では、typedefを使わずともstructを省略できる。

StructA sa;

(※3)変数の初期化をしない場合の値

■C/C++の場合
ローカル変数の場合:不特定の値になる。
グローバル変数およびstatic変数の場合:決まった値(デフォルト値)になる。

■Javaの場合
ローカル変数の場合:初期化せずに参照しようとするとコンパイルエラーになる。
クラスのメンバ変数の場合:決まった値(デフォルト値)になる。

0
0
10

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?