「純粋仮想関数」の版間の差分
提供: C++入門
(→ソースコード pure_virtual_function_1.cpp) |
|||
行1: | 行1: | ||
− | + | [[純粋仮想関数]] (pure virtual function) は、[[仮想関数]]の一種です。[[純粋仮想関数]]は、実装がなく、プロトタイプが宣言されているだけの関数です。 | |
− | + | * [[仮想関数]]のプロトタイプに 0 を代入します。 virtual void f() = 0; とすると実装が不要になります。 | |
− | + | * 実装を持たない[[仮想関数]] を [[純粋仮想関数]] と呼びます。 | |
+ | * [[純粋仮想関数]] を持つクラスは '''抽象クラス''' と呼ばれます。抽象クラスは、インスタンス化できません。 | ||
− | 読み方 | + | '''読み方''' |
;[[純粋仮想関数]]:じゅんすい かそう かんすう | ;[[純粋仮想関数]]:じゅんすい かそう かんすう | ||
;pure virtual function:ぴゅあ ばーちゃる ふぁんくしょん | ;pure virtual function:ぴゅあ ばーちゃる ふぁんくしょん | ||
行10: | 行11: | ||
== 概要 == | == 概要 == | ||
− | |||
[[純粋仮想関数]] (pure virtual function) は、[[仮想関数]]の一種です。[[純粋仮想関数]]は、実装がなく、プロトタイプが宣言されているだけの関数です。 | [[純粋仮想関数]] (pure virtual function) は、[[仮想関数]]の一種です。[[純粋仮想関数]]は、実装がなく、プロトタイプが宣言されているだけの関数です。 | ||
[[純粋仮想関数]]があるクラスは、そのままインスタンス化はできず、[[クラス]]を[[継承]]し、[[純粋仮想関数]]を[[オーバーライド]]して、実装しなければなりません。 | [[純粋仮想関数]]があるクラスは、そのままインスタンス化はできず、[[クラス]]を[[継承]]し、[[純粋仮想関数]]を[[オーバーライド]]して、実装しなければなりません。 | ||
このような[[クラス]]は、[[抽象クラス]]と呼ばれます。 | このような[[クラス]]は、[[抽象クラス]]と呼ばれます。 | ||
− | + | == 純粋仮想関数の宣言方法 == | |
[[純粋仮想関数]] の宣言は簡単で、プロトタイプ宣言に = 0 をつけるだけです。 | [[純粋仮想関数]] の宣言は簡単で、プロトタイプ宣言に = 0 をつけるだけです。 | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
行27: | 行27: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | '''virtual''' が [[仮想関数]] であることを意味します。 = 0 が純粋であることを意味します。 | ||
+ | 純粋の意味は、このクラスを直接しようせず、派生クラスを利用することを意味します。 | ||
== 純粋仮想関数の例 == | == 純粋仮想関数の例 == | ||
− | |||
=== ソースコード pure_virtual_function_1.cpp === | === ソースコード pure_virtual_function_1.cpp === | ||
− | |||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
#include <iostream> | #include <iostream> | ||
行55: | 行55: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== コンパイル === | === コンパイル === | ||
− | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | + | c++ pure_virtual_function_1.cpp -o pure_virtual_function_1 | |
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== 実行例 === | === 実行例 === | ||
− | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
% ./pure_virtual_function_1 | % ./pure_virtual_function_1 | ||
virtual void C1::f() | virtual void C1::f() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | == まとめ == | |
+ | [[純粋仮想関数]] を簡単にまとめます。 | ||
+ | * [[仮想関数]]のプロトタイプに 0 を代入します。 virtual void f() = 0; とすると実装が不要になります。 | ||
+ | * 実装を持たない[[仮想関数]] を [[純粋仮想関数]] と呼びます。 | ||
+ | * [[純粋仮想関数]] を持つクラスは '''抽象クラス''' と呼ばれます。抽象クラスは、インスタンス化できません。 | ||
== 関連項目 == | == 関連項目 == | ||
− | |||
* [[仮想関数]] | * [[仮想関数]] | ||
* [[クラス]] | * [[クラス]] | ||
* [[オーバーライド]] | * [[オーバーライド]] | ||
+ | <!-- | ||
+ | vim: filetype=mediawiki | ||
+ | --> |
2016年1月14日 (木) 14:48時点における版
純粋仮想関数 (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; とすると実装が不要になります。
- 実装を持たない仮想関数 を 純粋仮想関数 と呼びます。
- 純粋仮想関数 を持つクラスは 抽象クラス と呼ばれます。抽象クラスは、インスタンス化できません。