「純粋仮想関数」の版間の差分
提供: C++入門
行2: | 行2: | ||
* [[仮想関数]]のプロトタイプに 0 を代入します。 virtual void f() = 0; とすると実装が不要になります。 | * [[仮想関数]]のプロトタイプに 0 を代入します。 virtual void f() = 0; とすると実装が不要になります。 | ||
* 実装を持たない[[仮想関数]] を [[純粋仮想関数]] と呼びます。 | * 実装を持たない[[仮想関数]] を [[純粋仮想関数]] と呼びます。 | ||
− | * [[純粋仮想関数]] を持つクラスは | + | * [[純粋仮想関数]] を持つクラスは [[抽象クラス]] と呼ばれます。抽象クラスは、インスタンス化できません。 |
'''読み方''' | '''読み方''' | ||
行68: | 行68: | ||
* [[仮想関数]]のプロトタイプに 0 を代入します。 virtual void f() = 0; とすると実装が不要になります。 | * [[仮想関数]]のプロトタイプに 0 を代入します。 virtual void f() = 0; とすると実装が不要になります。 | ||
* 実装を持たない[[仮想関数]] を [[純粋仮想関数]] と呼びます。 | * 実装を持たない[[仮想関数]] を [[純粋仮想関数]] と呼びます。 | ||
− | * [[純粋仮想関数]] を持つクラスは | + | * [[純粋仮想関数]] を持つクラスは [[抽象クラス]] と呼ばれます。抽象クラスは、インスタンス化できません。 |
== 関連項目 == | == 関連項目 == | ||
* [[仮想関数]] | * [[仮想関数]] |
2016年1月14日 (木) 15:28時点における最新版
純粋仮想関数 (pure virtual function) は、仮想関数の一種です。純粋仮想関数は、実装がなく、プロトタイプが宣言されているだけの関数です。
- 仮想関数のプロトタイプに 0 を代入します。 virtual void f() = 0; とすると実装が不要になります。
- 実装を持たない仮想関数 を 純粋仮想関数 と呼びます。
- 純粋仮想関数 を持つクラスは 抽象クラス と呼ばれます。抽象クラスは、インスタンス化できません。
読み方
- 純粋仮想関数
- じゅんすい かそう かんすう
- pure virtual function
- ぴゅあ ばーちゃる ふぁんくしょん
目次
概要
純粋仮想関数 (pure virtual function) は、仮想関数の一種です。純粋仮想関数は、実装がなく、プロトタイプが宣言されているだけの関数です。 純粋仮想関数があるクラスは、そのままインスタンス化はできず、クラスを継承し、純粋仮想関数をオーバーライドして、実装しなければなりません。 このようなクラスは、抽象クラスと呼ばれます。
純粋仮想関数の宣言方法
純粋仮想関数 の宣言は簡単で、プロトタイプ宣言に = 0 をつけるだけです。
#include <iostream> using namespace std; class B { public: // 純粋仮想関数 virtual void f() = 0; };
virtual が 仮想関数 であることを意味します。 = 0 が純粋であることを意味します。 純粋の意味は、このクラスを直接しようせず、派生クラスを利用することを意味します。
純粋仮想関数の例
ソースコード pure_virtual_function_1.cpp
#include <iostream> using namespace std; class B { public: virtual void f() = 0; }; class C1 : public B { public: void f() { cout << __PRETTY_FUNCTION__ << endl; } }; int main(int argc, char const* argv[]) { C1 c1; c1.f(); return 0; }
コンパイル
c++ pure_virtual_function_1.cpp -o pure_virtual_function_1
実行例
% ./pure_virtual_function_1 virtual void C1::f()
まとめ
純粋仮想関数 を簡単にまとめます。
- 仮想関数のプロトタイプに 0 を代入します。 virtual void f() = 0; とすると実装が不要になります。
- 実装を持たない仮想関数 を 純粋仮想関数 と呼びます。
- 純粋仮想関数 を持つクラスは 抽象クラス と呼ばれます。抽象クラスは、インスタンス化できません。