|
■講義一覧
1. 変数宣言
2. importとinclude(ヘッダー)
3. 制御文(if,for,switch)
4. クラス定義について
5. コンストラクタ/デストラクタについて
6. 継承について
7. ポインタについて
8. 値渡し/参照渡し
9. 前方参照について
10. プリプロセッサについて
11. ガーベッジコレクション(メモリリーク)
12. インライン関数(inline)について
13. スコープ演算子について
■1. 変数宣言
・初期値を定義しない場合は、"0"で初期化される。
⇒C++では、初期化されない
・char型は16ビット(2バイト)のユニコードで扱う。
⇒C++では、8ビット(1バイト)で処理を行う。
・boolean型のtrue,falseは数値としては扱えない。
⇒C++では、trueを0以外、falseを0の数値で扱うことができる。
一覧へ
■2. importとinclude(ヘッダー)
・JAVA言語では、ヘッダーという概念はなく、"import"定義より他クラスの情報やライブラリの
呼び出しを可能にする。
⇒C++では、ヘッダーファイル又はライブラリの追加より対応する
一覧へ
■3. 制御文(if,for,switch)
・if文:C++と同じです。
・for文:C++と同じです。
・switch文:C++とほぼ同じですが、条件式に入る対象の変数型は以下のとおりです。
⇒byte型、short型、int型、char型 ※long型はコンパイルエラーになるので注意
一覧へ
■4. クラス定義について
・クラス定義終了時にセミコロンが無い。
⇒C++では、セミコロンが無い場合、コンパイルエラーになる。
・C++のクラスとは、関数定義が可能で且つ、アクセス制御ができる構造体とも言える。
一覧へ
■5. コンストラクタ/デストラクタについて
・コンストラクタが定義されていない場合、デフォルトコンストラクタが自動的に定義される。
・JAVA言語では、デストラクタはありません。ガーベイジコレクタによって制御される為、
プログラマは意識する必要はない。
⇒C++では、クラスのデストラクタで解放処理などを定義する。
一覧へ
■6. 継承について
・JAVA言語では、1つのクラスからしか継承ができない。
⇒C++では、複数のクラスから継承が可能。
・階層の制限はありません。
⇒C++も同様。
・JAVA言語の場合、コンストラクタは継承されません!
サブクラスでは、明示的にsuper()を定義し、親クラスのコンストラクタを呼び出さなければいけません。
※サブクラスにsuper()が定義されていなかった場合、コンパイラが自動的に追加してくれます。
⇒C++で継承した場合、親クラスから順にコンストラクタが呼ばれます。
デストラクタは逆に子クラスから呼び出されます。
一覧へ
■7. ポインタについて
・JAVA言語では、ポインタの概念がありませんっとよく解説書やWEBページで聞きますが、
実際は誤った表現です。
・正式には言うのであれば、JAVA言語にはポインタ演算がありません。※ポインタ自体は存在します。
・ポインタとは、アドレスを代入する変数であり、オブジェクトや配列などはポインタです。
ただ、上記のとおり、C++言語で行っていたポインタに+1を値を取得といったことを禁止しています。
一覧へ
■8. 値渡し/参照渡し
・JAVA言語では、関数の引数を値渡しか参照渡しか引数の型によって変わります。
⇒C++では、ポインタや&(参照渡し)で任意に指定できる。
・プリミティブ型(boolean,char,byte,short,int longなど)は、すべて値渡しになります。
・クラスや配列の場合は、参照渡しになります。
【補足】
値渡し:呼び出し元で指定した引数がコピーされ、関数内で変更しても呼び出し元へは変更がない。
参照渡し:引数にはアドレスが渡され、関数内で変更した場合、呼び出し元も変更される。
一覧へ
■9. 前方参照
・JAVA言語では、コンパイラが自動的に確認する為、明示的にクラスを定義する必要はない
【前方参照】
・クラス内で他クラスを定義する場合、他クラスが定義前のときはコンパイラに教える必要があります。
この宣言のことを、前方参照といいます。
class TESTB;
class TESTA{
//J 前方参照が無い場合、TESTBクラスが定義前なのでエラー
TESTB b_ob;
};
class TESTB{
};
|
一覧へ
■10. プリプロセッサ
・JAVA言語では、プリプロセッサという概念はありません。
基本的には、import定義より対応する。
【プリプロセッサ】
・プリプロセッサとは、ソースコードをコンパイル前にソースコードに処理をするプログラムのことです。
例:ヘッダーファイルの読込、マクロ展開、定数の置き換えなど
一覧へ
■11. ガーベッジコレクション(メモリリーク)
・JAVA言語では、ガーベッジコレクションと言われる不要データの自動解放機能があります。
これにより、プログラマが明示的に解放処理を追加しなくて済むので、負荷が軽減されています。
⇒C/C++では、解放処理(delete)を必ず定義しなければいけません。
解放漏れが発生すると、メモリリークとなり致命的な障害が発生する場合があります。
一覧へ
■12. インライン関数(inline)について
・JAVA言語では、インライン関数はありません。
【インライン関数】
・インライン関数とは、関数呼び出しにかかるオーバヘッド(負荷)を軽減し、実行速度を高めます。
一覧へ
■13. スコープ演算子について
・JAVA言語では、スコープ演算子(::)はありません。
メソッド定義はクラス内で定義する為、必要ありません。
一覧へ
|