ためになるホームページ お問い合わせ




TOP > c++ > クラスの基本
クラスとは?
オブジェクト単位でものを扱う。クラスという一つのまとまりを作りメソッド(関数)・プロパティ(変数)の所有者をクラスにする。
クラスの作成には、「class」キーワードを使用する。

クラスの定義の例
/*!
 ******************************************************************************
 * \brief クラスの定義
 *
 ******************************************************************************
 */
class parentC
{
private:                         //・・・(1)
  int privateA;                  //・・・(2)
  void privateA_func();          //・・・(3)
protected:                       //・・・(4)
  int protectedB;                //・・・(5)
  void protectedB_func();        //・・・(6)
public:                          //・・・(7)
  parentC();                     //・・・(8)
  ~parentC();                    //・・・(9)
  parentC(int a, int b, int c);  //・・・(10)
  int publicC;                   //・・・(11)
  void publicC_func();           //・・・(12)
};


(1)private・・・アクセス指定子。以下に示すメンバ変数・メソッドは、このクラス内からしかアクセスできず、外部からアクセスすることはできない。アクセス指定子の後ろはコロンを置く。
(2)privateなメンバ変数。この変数はこのクラスのメンバしかアクセスできない。
(3)privateなメンバメソッド。このメソッドはこのクラスのメンバ関数からしか呼び出すことができない。
(4)protected・・・アクセス指定子。以下に示すメンバ変数・メソッドは、このクラス内からのアクセスもしくは、このクラスを継承した派生クラスからしかアクセスできない。ほぼprivateと一緒だが、派生クラスからのみアクセスできる。
(5)protectedなメンバ変数。この変数はこのクラスのメンバもしくは、派生クラスからしかアクセスできない。
(6)protectedなメンバメソッド。このメソッドはこのクラスのメンバもしくは、派生クラスからしかアクセスできない。
(7)public・・・アクセス指定子。以下に示すメンバ変数・メソッドは、外部からもアクセスできる。
(8)コンストラクタ。コンストラクタとは、オブジェクト生成時に呼び出される特殊メソッド。
(9)デストラクタ。デストラクタはオブジェクト破棄時に呼び出される特殊メソッド。
(10)コンストラクタ(オーバーロード)。コンストラクタはオーバーロードする事ができる。
(11)publicなメンバ変数。このメンバ変数は、外部からもアクセスできる。
(12)publicなメンバメソッド。このメンバメソッドは、外部から呼び出すことができる。

クラスの使用方法
クラスは宣言しただけでは、使用できない。使用するにはオブジェクトを生成する必要がある。
オブジェクトを生成するには、以下のように生成する。
ローカル変数を定義するように宣言する。
引数付のコンストラクタを呼び出す。
動的にオブジェクトを生成する。

クラスの宣言の例
/*!
 ******************************************************************************
 * \file classSample2.cpp
 * \brief クラスの定義
 *
 *
 ******************************************************************************
 */
#include <iostream>
using namespace std;

/*コンストラクタを宣言していないクラス*/
class parentC0
{
public:
  int publicC;
  void publicC_func();
};

/*コンストラクタを宣言しているクラス*/
class parentC1
{
public:
  parentC1()
  {
    cout << "クラスparentC1のコンストラクタが呼ばれました。" << endl;
  };
  ~parentC1()
  {
  };
  int publicC;
  void publicC_func()
  {
    cout << "publicC = " << publicC << endl;
  }
};

/*引数付のコンストラクタのみを宣言しているクラス*/
class parentC2
{
public:
  parentC2(int a)
  {
    publicC = a;
    cout << "クラスparentC2の引数付のコンストラクタが呼ばれました。" << endl;
  }
  ~parentC2(){};
  int publicC;
  void publicC_func()
  {
    cout << "publicC = " << publicC << endl;
  }
};

/*引数無しのコンストラクタと引数付のコンストラクタを宣言したクラス*/
class parentC3
{
public:
  parentC3()
  {
    cout << "クラスparentC3の引数無しのコンストラクタが呼ばれました。" << endl;
  };
  parentC3(int a)
  {
    publicC = a;
    cout << "クラスparentC3の引数付のコンストラクタが呼ばれました。" << endl;
  }
  int publicC;
  void publicC_func()
  {
    cout << "publicC = " << publicC << endl;
  }
};


/*main()関数*/
int main(int argc, char** argv)
{
  //クラスparentC0のオブジェクトを生成する
  parentC0 parent0_0; //ok
  parentC0 parent0_1 = parentC0(); //ok

  //クラスparentC1のオブジェクトを生成する
  parentC1 parent1_0; //ok
  parentC1 parent1_1 = parentC1(); //ok

  //クラスparentC2のオブジェクトを生成する
  parentC2 parent2_0; //NG(引数付のコンストラクタしかないため)
  parentC2 parent2_1 = parentC2(1); //ok

  //クラスparentC3のオブジェクトを生成する
  parentC3 parent3_0; //ok
  parentC3 parent3_1 = parentC3(); //ok
  parentC3 parent3_2 = parentC3(1); //ok
  return 0;
}







Copyright 2007 ためになるホームページ All Rights Reserved.