C++ class とそれに関係してくるものを書いて覚えるための初心者自己中記事③
続きです。
次はclass の継承について勉強。
共通部分がある class はその共通部分だけの class を作りそれを親として
子の class に継承できる。
親クラスの事を基底クラス
子クラスのことを派生クラスと呼ぶ。
これが
---------------------------------------------
class InputCin{
public:
bool Set();
double Get(); //共通点
private:
double inputNum; //共通点
};
class InputArray{ // class InputArrayは配列の管理
public:
InputArray(const double* array); //配列を受け取る引数付きコンストラクタ
bool Set(); //Set関数が呼び出されるたびにinputIndexとinputNumに次のインデックス番号と数値が記憶される
double Get(); //Set関数でセットされたインデックスの数値を返す
private:
const double* inputArray; //配列のアドレスポインタ
int inputIndex; //Set関数で現在のインデックスを記憶
double inputNum; //Set関数で現在のインデックスの数値を記憶
};
---------------------------------------------
こうなる
---------------------------------------------
class Input{
public:
double Get(); //共通点
//privateだとエラーになったからとりあえずpublic
double inputNum; //共通点
};
class InputCin : public Input{
public:
bool Set();
private:
};
class InputArray : public Input{ // class InputArrayは配列の管理
public:
InputArray(const double* array); //配列を受け取る引数付きコンストラクタ
bool Set(); //Set関数が呼び出されるたびにinputIndexとinputNumに次のインデックス番号と数値が記憶される
private:
const double* inputArray; //配列のアドレスポインタ
int inputIndex; //Set関数で現在のインデックスを記憶
};
---------------------------------------------
通常のクラス作成と同じようにして基底クラスを作成したら、
派生クラスになるクラスのクラス名の後に : public 基底クラス名を追加する。
もちろん共通部分で基底クラスに移動したメンバは派生クラスからは削除する。
実装部分も普通にやればできました。
そして、基底クラスを設ける前は double inputNum は private でOKだったんだけど
エラーになったのでとりあえず public にしてあるがこれは別のものに出来る。
アクセス指定子
public
private
protected <-NEW!!
protected は外部からのアクセスは禁止される。ただし派生クラスからのアクセスなら許可されるのだ。
つまり、これは前述の double inputNum の為にあるようなものだ。
今日はここまで
明日はアップキャストとやらの勉強