2015年8月23日日曜日

【C++の勉強(2)】オブジェクト指向とクラス

C++というと、まず質問されるのが、オブジェクト指向です。
オブジェクト指向は、以下3つを覚えておきましょう。

1、オブジェクト指向

(1) カプセル化
後ほど説明するクラス内に、手続きとデータをまとめて(隠蔽)、一体化させます。
このことをカプセル化といいます。
まとめることで、必要な関数がどこあるのか分かり易くなるので、開発しやすくします。
また、外部からデータアクセス防止することで、バグ防止も行えるようになります。


(2) ポリモーフィズム(多様性)
同一の名前で複数の目的に使用するための性質のことです。
具体的には、同一のメッセージを送っても、それを受け取るオブジェクトにより動作をこなるようにします。
送る側のオブジェクトが一つのメッセージを送るだけで、複数の異なる動作を実装できるので、オブジェクト間のインターフェースを単純化できます
関数、演算子、クラスのオーバロードを使用します。


(3) インヘリタンス(継承)
新しくオブジェクトを作るとき、既にあるオブジェクト(基底クラス)の性質(データ構造と手続き)を受け継ぐプロセス(サブクラスにする)のことです。


2、クラス
 同一のデータ構造と同一の手続きをもつオブジェクトをまとめます。
オブジェクト指向プログラミングでは、クラスを作りそれを組み合わせることによってアプリケーションを構築していきます。

尚、データ構造に対し具体的な値を設定したものをインスタンスといいます。
したがって、クラスはインスタンスの仕様を定義したものです。

【クラス定義】
クラスは class クラス名で定義します。
構造体を知っている方は構造体structをclassに代わったものと思えばいいです。
class内には、メンバ変数と関数を定義します。

【アクセス指定子】
publicと定義すると、class外部から参照でき、protectedはclass内部及び派生関数のみ参照できます。
privateはclass内部からのみ参照できます。
public/protectedを省略すると、privateと定義したものとみなされます。

【コメント】
コメントは、//または/**/(/*と*/内にコメント記述)を使用します。

【クラス内定義と例】
クラス内のメンバ変数には、"m_"を定義して、クラス内のメンバ変数であることを分かり易くします。
関数は、"クラス名::関数名"で定義します。

コンストラクタはオブジェクト作成時に呼ばれますので、変数の初期化を行うのに便利です。
デストラクタは、オブジェクト破棄時に呼ばれますので、メモリ開放など行うのに便利です。

以下が実際に作成した簡単なクラス例です。

<四角形を定義したクラス>
class shape{
    int m_x;         // x座標
    int m_y;         // y座標
    int m_width;   // 幅
    int m_height;  // 高さ
public:
    void initialize(int, int, int ,int);    //初期状態の設定
    void modify_position(int,int);      //位置の変更

    shape();                                  // コンストラクタ
    ~shape();                                // デストラクタ
};

void shape::modify_position(int x, int y)
{
    m_x = x;
    m_y = y;
}

void shape:initialize(int x, int y, int w, int h)
{
    m_x = x;
    m_y = y;
    m_width = w;
    m_height = h;
}

クラスについての実装について、詳しくは別の機会に行う事にして、今回は以上とします。

【参考URL】
http://www.geocities.co.jp/SiliconValley-Cupertino/3384/Cplus.html
https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0




0 件のコメント:

コメントを投稿