C++クラス

クラスについて

クラスとは

C++のクラスは、C言語の構造体を機能拡張したものであり、変数(データ)と関数(メソッド)を持っている構造体です。

C++におけるクラスは、以下の機能を提供します。

  • オブジェクト指向プログラミングにおける「カプセル化」機能を提供します。
  • 実現の詳細を隠蔽し、内部的な動作メカニズムを知らなくても利用できる(データの抽象化)ようにします。

クラスの定義

クラスの簡単な書式は以下の通りです。(クラスの終端には「;」コロンを記述する必要があります。)


class クラス名{
    private:
        // 非公開部分
    public:
        // 公開部分
};

クラスはアクセス制限を実現するために「アクセス識別子」を用います。

指定 説明
public これ以降に書かれたメンバは公開されます。すべての関数でクラスメンバを使用できます。
private これ以降に書かれたメンバは非公開となります。クラスのメンバ関数とフレンド(クラス、関数)でクラスメンバを使用できます。
protected クラスの継承を用いる場合に意味持つアクセス識別子です。この宣言がされたクラスメンバはprivate機能を持ち、派生クラスのメンバ関数からアクセスが可能になります。

メソッドの定義と呼び出し

クラス宣言の中でメソッドを定義

クラス宣言内でメソッドを定義することで、オブジェクト生成後に呼び出すことができます。

C++で「オブジェクトを生成する」とは、classで定義した型の変数を定義する(領域を確保する)ことです。

オブジェクト生成にはポインタを利用することもできます。(C++でのメモリ確保には「new」を用い、解放には「delete」を用います。)


クラス型 変数名;                // オブジェクトを生成する方法。
クラス型 *変数名 = new クラス型 // ポインタに領域を確保する方法。

クラスメソッドの呼び出し

メソッドの呼び出しは「クラス名.メソッド」とするか「クラスへのポインタ->メソッド」とします。

なお、オブジェクト指向では、メソッド(メンバ関数)の呼び出しを「メッセージを送る」と表現します。


#include <iostream>
using namespace std;

class Cube{
    private:
        int height;
        int width;
        int depth;
    public:
        void set(int a, int b, int c){
            height = a;
            width  = b;
            depth  = c;
        }
        int get_volume(void){
            return(height * width * depth);
        }
};

int main()
{
    Cube *cube1 = new Cube;
    cube1->set(3,4,5);
    cout << cube1->get_volume() << endl;
    delete cube1;
    return(0);
}

スコープ決定演算子の利用

スコープ決定演算子を利用することで、メソッドの定義をクラス宣言の外に出すことができます。

その場合には、クラス宣言でメソッドのプロトタイプ宣言を行う必要があります。


#include <iostream>
using namespace std;

class Cube{
    private:
        int height;
        int width;
        int depth;
    public:
        void set(int a, int b, int c);
        int get_volume(void);
};
 
void Cube::set(int a, int b, int c){
    height = a;
    width  = b;
    depth  = c;
}

int Cube::get_volume(void){
    return(height * width * depth);
}

int main()
{
    Cube *cube1 = new Cube;
    cube1->set(3,4,5);
    cout << cube1->get_volume() << endl;
    delete cube1;
    return(0);
}

関連ページ