第 5 章: クラス構造

クラスとは

オブジェクト指向プログラミングにおいては, クラスは必ず登場する.

クラス構造 = メンバ変数 + メンバ関数

C++ における構造体

注意:

C++ の構造体には関数を含めることができる.

C++ で構造体を使う場合には, 構造体変数を宣言するときに struct キーワードをつける必要なくなった:

struct sample s; /* C 言語のとき struct キーワードが必要 */
sample s; /* C++ では struct キーワードが不要 */

また, これと同様に, enum と union に付いても, C++ ではキーワードを付ける必要なくなった.

クラスの宣言

CSample はクラスの名前である:

class CSample{
  public:
    void function(); // メンバ関数 1
    int function2(); // メンバ関数 2
  private:
    int m_num; // メンバ変数 1
    char *m_str; // メンバ変数 2
}

クラスを使ってみる

クラスの変数を宣言する:

CSample obj; // CSample クラスの変数を obj に宣言する

[インスタンス化] は [クラスを実体化する] という意味がある. [クラス] はそのままでは単なる [型] にすぎないので, 使うには, 実体化する必要がある.

class1.cpp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>

// クラス宣言
class CSample{

private:
  int m_num;
  
public:
  void set(int num); // m_num に値を設定する
  int get(); // m_num に値を取得する
};

void CSample::set(int num){
  m_num = num;
}

int CSample::get(){
  return m_num;
}

int main(){
  CSample obj; // CSample をインスタンス化
  int num;

  std::cout << "整数を入力してください: " << std::endl;
  std::cin >> num;

  obj.set(num); // CSample クラスのメンバ変数をセット
  std::cout << obj.get() << std::endl; // メンバ変数の値を出力

  return 0;
}

class1.cpp の実行結果は:

[wtopia cpp.lang]$ g++ -Wall -O2 -o class1 class1.cpp
[wtopia cpp.lang]$ ./class1
整数を入力してください:
20
20
[wtopia cpp.lang]$ g++ -Wall -O2 -o class1 class1.cpp
[wtopia cpp.lang]$ ./class1
整数を入力してください:
40
40
注意::
private キーワードによって, メンバ変数 m_num に直接アクセスできない. obj.m_num のような書き方が禁止される.