Top > C++言語 > クラスの定義


クラスを定義する構文

クラスは構造体の親戚である為、クラスを定義する構文は、 構造体を定義する構文と似ている

構文
  • class というキーワードに続けてクラス名を付ける
  • クラス全体を { と } のブロックで囲む
  • 末尾の } の後ろにセミコロン (;) を付ける
  • ブロックの中にクラスのメンバを記述する
  • クラスでは、変数と関数の両方をメンバにできる
構造体の定義(C言語)
すべてを展開すべてを収束
  1
  2
  3
  4
  5
 
-
|
|
!
struct _car
{
  int num;
  double gas;
};
クラスの定義(C++)
  • struct の代わりに class というキーワードを使用する
  • アクセス指定子 public:というキーワードも使用する
    すべてを展開すべてを収束
      1
      2
      3
      4
      5
      6
    
     
    -
    |
    |
    |
    !
    
    class Car
    {
    public:
      int num;
      double gas;
    };

  • 変数だけを持つクラス、関すだけを持つクラス、両方を持つクラスを定義できる
    すべてを展開すべてを収束
      1
      2
      3
      4
      5
      6
      7
      8
    
     
    -
    |
    |
    |
    |
    |
    !
    
    class Car
    {
    public:
      int num;
      double gas;
      void setGas (void);
      void showCar (void);
    };


メンバ関数の実装

メンバ関数の処理内容を実装するコードは、
クラスを定義するブロックとは独立した別のブロックに記述する

実装方法
  • setGas() の所有者は Car クラスである
  • 所有者をコードで示す為に、関数名の前に「クラス名::」と指定する
  • このコロン2つのことをスコープ解決演算子という
実装サンプル
すべてを展開すべてを収束
  1
  2
  3
  4
  5
 
 
-
|
!
void
Car::setGas (void)
{
  gas += 1.00;
}
ポイント
  • メンバ関数の中からは、同じクラスのメンバ変数とメンバ関数を所有者を指定せずに利用できる
  • 一般的に、クラスの定義はヘッダーファイル(*.h)、
    メンバ関数の実装はソースファイル(*.cpp)に記述する


インライン関数

処理内容が短いものなら、クラスを定義するブロックの中で
メンバ関数を実装することができる。この場合、自動的にインライン関数となる

サンプル
すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 
-
|
|
|
|
-
|
!
!
class Car
{
public:
  int num;
  double gas;
  void setGas (void)
  {
    gas += 1.00;
  }
};
ポイント
  • Car クラスを使う側のコードで、
    setGas() を呼び出すと、その位置に setGas() 関数の処理内容が展開される


クラスとオブジェクトの違い

構造体と同様に、クラスは型であり、クラスを定義しただけでは実体がない。
クラスをデータ型とした変数を宣言してから使用する

使用方法
  • Car クラスをデータ型とした変数 toyotaは下記のように定義する
  • クラスをデータ型とした変数の宣言では、class というキーワードを省略する
  • toyota.setGas() という構文で、メンバ関数を呼び出すことができる
  • 個々のメンバ変数や関数は、単独の変数や関数と同様に取り扱うことが出来る
    Car toyota;
    Car toyota, suzuki;
ポイント
  • クラスがメモリ上に実体を持ったものをオブジェクト、又はクラスのインスタンスという
  • クラスをデータ型とした変数を宣言して使う言語仕様にしたのは、
    必要な数だけオブジェクトを作れるようにする為です


参考


リロード   凍結解除 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Mon, 03 Jun 2019 14:37:49 UTC (2116d)