【C/C++】よく使われる用語解説①
クラスとオブジェクトとインスタンス
クラスはメンバ変数とメンバ関数などをメンバに持つデータ型。
クラス定義と同時にオブジェクトの定義も可能なため、最後にセミコロン”;”が必要になる。
class クラス名{
メンバの宣言
};
オブジェクトは「状態」「ふるまい」「識別性」を持ったもの。
例)クラス = 人間
オブジェクト = ○○君、△△さん
(クラス)人間は「名前」「年齢」「性別」など人間に共通した型を持っている。
(オブジェクト)○○君は「名前=けんた」「年齢=20さい」「性別=男」など個別の中身を持っていることで同じ型を持った他の人間と識別性がある。
・クラス:設計図
・インスタンス:実際に作った物
・オブジェクト:モノ(クラスとかインスタンスとかをふんわりと表現したもの)
クラス:スマートフォン
インスタンス:iPhoneやAndroidの実機
オブジェクト:ケータイ
のイメージでしょうか。
クラス「スマートフォン」は「それがどんなものかって概念」。
インスタンス「iPhoneやAndroidの実機」は「実際に使える物体」。
オブジェクト「ケータイ」は「それらを、ふんわりと表現したもの」。
//ピヨピヨ族クラス
class PiyoPiyoZoku{
//---------------------
//属性(プロパティ)
//---------------------
// 年齢
private int age;
//---------------------
//操作(メソッド)
//---------------------
// 年齢設定
void setAge(int age){
this.age = age;
}
// 年齢取得
int getAge(){
return this.age;
}
}
//主処理
public class test{
public static void main(String[] args){
//PiyoPiyoZokuクラスのインスタンス「piyota」を生成
PiyoPiyoZoku piyota = new PiyoPiyoZoku();
//年齢を設定
piyota.setAge(18);
//年齢を表示
System.out.println("ピヨ太の年齢:" + piyota.getAge());
}
}
メソッド
オブジェクトには「属性」と「操作」の二つの要素がある。
属性を宣言しているのが「メンバ変数」、操作を宣言しているのが「メソッド」ということになる。
メソッド ≒ 関数()
コンストラクタ
クラスと同名の戻り値のない関数。
コンストラクタは必ずしも定義する必要はない。
その場合、初期化は行われない。
class Color
{
public:
UInt08 r;
UInt08 g;
UInt08 b;
Color() // ← コンストラクタ
{
r = g = b = 0;
}
Color(UInt08 n) // ← コンストラクタ
{
r = g = b = n;
}
Color(UInt08 r0, UInt08 g0, UInt08 b0) // ← コンストラクタ
{
r = r0;
g = g0;
b = b0;
}
};
デストラクタ
終了処理を行うための特別な関数。
スタック上に作成されたオブジェクトが自動的に破棄されるときや、ヒープ上に作成されたオブジェクトを delete 演算子により明示的に破棄するときに、必ず呼び出される。
~ 関数名() で宣言できる。
メモリリークが起こらないように入れておくことが望ましい。
class Buffer
{
private:
UIntN size; // バッファ サイズ
VoidPtr pointer; // バッファ ポインタ
// ↑のVoidPtr はVoid* のことです。SophiaFramework UNIVERSE はポインタをPtr をつけて表します。
public:
Buffer()
{
size = 0;
pointer = NULL;
}
Buffer(UIntN sz)
{
size = sz;
pointer = MemoryAllocate(sz);
}
VoidPtr GetPointer()
{
return pointer;
}
~Buffer() // デストラクタ
{
if (pointer != NULL)
MemoryFree(pointer);
}
};
メモリリーク
オブジェクトを作成した後にメモリ開放処理を入れ忘れることによってメモリ容量が減っていく現象、またはメモリ開放処理を入れ忘れるというプラグラムの欠陥・バグ。