クラスの使い方
クラスの定義ではクラスの作り方を学習しましたが、ここではクラスの使い方について学習します。
大まかな流れとして
①クラスのインスタンスを生成
②メンバにアクセスして処理を行う
という形になります。
そんなに難しいことはありません。
その前に準備として、そのクラスを使える状態にしなくてはなりません。
具体的には
①ソースコード内にクラスの定義が存在する
②クラスの定義が記述されたファイルをインクルードする
のどちらかが必要です。
これは関数と一緒ですね。
ではインスタンスの生成方法です。
インスタンスについてはオブジェクト指向とはを参照。
【クラス名】 【インスタンス名】;
このように記述することでそのクラスのインスタンスを生成できます。
変数と一緒ですね。
例えばstringクラスのインスタンスstrを生成する場合は
string str;
のようになります。
メンバへのアクセス
インスタンスを生成したら、そのメンバ変数・関数にアクセスすることができます。
クラス外から、メンバ変数やメンバ関数にアクセスするには以下のように記述します。
【インスタンス名】.【メンバ変数名】
【インスタンス名】.【メンバ関数名】(【引数】)
「.」はドット演算子といいます。
ドット演算子でインスタンス名とメンバ変数・メンバ関数名を区切って表記します。
これならそのインスタンスのメンバであることがわかり易くなりますね。
実例です。
class_sample1.cpp
string str = "hello, world"; std::cout << str.length();
stringクラスのオブジェクトstrを生成し、その長さを返すメンバ関数を呼び出しています。
詳しくはstringクラスを参照。
ポインタを使ったアクセス
クラスにおいてもポインタを適用することができます。
詳しくはポインタを参照。
インスタンス名の前に*を付けるとアドレスを格納することになり、そのアドレスが示すインスタンスのメンバにアクセスすることが出来ます。
その際にはドット演算子ではなくアロー演算子「->」使います。
ハイフンと大なりで1セットになります。矢印のように見えるのでアロー演算子といいます。
【インスタンスのポインタ名】->【メンバ変数名】
【インスタンスのポインタ名】->【メンバ関数名】(【引数】)
となります。
例は以下のようになります。
class_sample2.cpp
string str = "hello, world"; string *pstr = &str; std::cout << pstr->length();
先ほどの例と同じ結果になります。
また、参照したいメンバと同じクラス内にあるメンバ関数からアクセスする際は、ドット演算子もアロー演算子も必要ありません。
単に変数、関数として呼び出すことができます。
厳密には、メンバ関数を呼び出したときに自動的に呼び出したインスタンス自身のポインタが渡されます。
このポインタはthisポインタといいます。
つまりクラスないから呼び出す場合は
this->【メンバ変数名】
this->【メンバ関数名】(【引数】)
となりますが、これは省略することが出来るので実質的には変数、関数として扱えます。
ソースコードをわかり易くするためにあえて書くことも多いので覚えておいて損は無いでしょう。