作成日: 2021/08/05 更新日: 2023/03/23
初めに
クラスは、次の3つの特徴を持っています。
① メンバーを持っています。
② 内部で完結した処理を行い、外部へのメンバーの公開を限定できます。
③ 継承ができます。
クラスの特徴
メンバー
メンバーは、次の2つに分類できます。
① データ:メンバー変数やプロパティと呼ばれます。
② 処理:メンバー関数やメソッドと呼ばれます。
インターフェイス
メンバーは、データも処理も原則的に公開か非公開かに分類されます。
(個人的にはデータを公開にすることは、賛成できなく、データを公開するときは、公開用の処理を用意するべきだと思っています。)
データメンバーは、クラス内のどの処理メンバーからでも使用できます。
これを、「データのスコープはクラス内にある」と言います。
絶対にクラス外からアクセスできません。
データメンバーは、このスコープを守るために非公開にするべきだと思っています。
公開したメンバーのことをインターフェイスと呼びます。
クラスを使用するプログラムは、このインターフェイスを介してのみクラスにアクセスできます。
コンストラクタとデストラクタ
特殊な処理メンバーとして次の2つがあります。
下記のインスタンス化を参照してください。
① コンストラクタ:クラスがインスタンス化される時、自動的に呼び出されます。
② デストラクタ:生成されたインスタンスが破棄される時、自動的に呼び出されます。
継承
クラスは、継承によって派生クラスを定義できます。
元になるクラスをスーパークラス、派生されるクラスをサブクラスと呼びます。
インスタンス化
クラスは、ソースコードであって、実行可能なマシン語コードではありません。
インスタンス化を実務的に言えば、「クラスをオブジェクト変数化する」と言い換えることもできます。
インスタンス化は、コンピュータ(例えば、パソコン)のメモリを使います。
必要のなくなったオブジェクト変数は破棄してメモリを解放する必要があります。
例
下記の例はC++言語の文法を模倣したもので、実際には動作しないので注意ください。
例1
class cls{
cls(){
prv();
}
private:
int a;
prv(){
a = 1;
}
public:
int get_a(){
return a;
}
}
b = new cls();
c = b->get_a();
class clsは{}の中でクラスclsの定義をしますという宣言です。
cls()は、C++言語でコンストラクタ関数をクラスと同じ名前で定義するので真似しました。
そして、コンストラクタは、メンバー関数prv()を使ってメンバー変数aの値を1にしています。
private:で定義されたメンバーは非公開です。
public:で定義されたメンバーは公開です。
b = new cls();はクラスclsをインスタンス化して変数bに代入しています。尚、new はインスタンス化しますという文法ですが、使えない言語もあるかもしれないので注意してください。
c = b->get_a();は、公開されているget_a()を使ってclass clsのメンバー変数aの値を変数cに代入しています。
「->」はC++の文法で、他の言語では「.」を使うこともあります。
例2
class subcls : cls{
public:
set_a( int d ){
a = d;
}
}
e = new subcls;
e->set_a( 4 );
f = e->get_a();
class subcls : clsは、スーパークラスclsを継承して、サブクラスsubclsを定義しています。subclsはclsのメンバーを全て使えます。
メンバー変数aに値4を代入して、その値を取得しています。
メールアドレス: