C++

C++ は, C 言語を拡張してオブジェクト指向に対応した言語で, ビャーネ・ストロヴストルップによって 1983 年に開発された. 実行速度を犠牲にしないように様々な工夫がされているため, 他のオブジェクト指向言語と比べて高速なコードを生成されることが多い. C と C++ の要素が JAVA に多く取り入れられているため類似点が多い.

クラスの定義とメソッドの実装

C++ では, 構造体の拡張によりクラスを表現している. 基本的には, C 言語の構造体 (structにより定義される) にカプセル化のためのアクセス指定子とメソッド定義を追加したものである. クラスの定義には, “struct” ではなく “class” を用いる. また, JAVA と異なり, 宣言と実装は別々に書くことが多い (JAVA のようにまとめて書くこともできる)

宣言:

class クラス名{
  public: // 以下のメソッドと変数は公開される(クラスの外からアクセスできる)
    メソッドの戻り値の型 メソッド名(引数, ...);
     :                    :

    メンバ変数の型 メンバ変数名;

  private: // 以下のメソッドと変数は公開されない (クラスの外から見えない)
    メソッドの戻り値の型 メソッド名(引数, ...);
      :                    :

    メンバ変数の型 メンバ変数名;
};

定義:

メソッドの戻り値の型 クラス名::メソッド名(引数, ...){
  実装コード
}

例) File クラスの C++ における宣言例:

class File{
public:
  File();
  ~File();
  void open(char *filename);
  void write(char *data);
  void read(char *data);
  void close();

private:
  FILE *file_description;
};

定義例:

File::File(){
  file_descriptor = NULL;
}

File::~File(){
  close();
}

void File::open(char *filename){
  if(file_descriptor != NULL){
    file_descriptor = fopen(filename, "rw");
  }else{
    エラーの処理
  }
}

コンストラクタとデストラクタ

コンストラクタとは, インスタンスが生成されるときに呼び出される特殊な関数で, メソッド名はクラスと同名 で戻り値はない. 引数を指定できる.

デストラクタは, 逆にインスタンスが廃棄されるときに呼び出される. メソッド名は, チルダ (~) クラス名となる. インスタンスが廃棄されるのは, 後述する delete により削除されるときかローカルスコープのインスタンスがスコープから外れるときである.

Number.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
34
35
36
37
38
39
40
41
42
#include <stdio.h>

class Number{
public:
  Number(); // コンストラクタ
  ~Number(); // デストラクタ

  void setNumber(float n);
  float getNumber();

private:
  float num;
};

Number::Number(){
  printf("Construct an instance of the Number\n");
}

Number::~Number(){
  printf("Destruct an instance of the Number\n");
}


void Number::setNumber(float n){
  num = n;
}

float Number::getNumber(){
  return num;
}

int main(void){
  printf("The main funtion is started.\n");
  Number n;
  Number others;
  n.setNumber(5);

  printf( "number is %f\n", n.getNumber() );
  printf("The main function is finished.\n");
  
  return 0;
}

Number.cpp の実行結果は:

bash-3.2$ g++ -Wall -O2 -o Number Number.cpp
bash-3.2$ ./Number
The main funtion is started.
Construct an instance of the Number
Construct an instance of the Number
number is 5.000000
The main function is finished.
Destruct an instance of the Number
Destruct an instance of the Number

new と delete

カプセル化

継承

ポリモーフィズム