「純粋仮想関数」の版間の差分

提供: C++入門
移動: 案内検索
(ソースコード pure_virtual_function_1.cpp)
行1: 行1:
<!--
+
[[純粋仮想関数]] (pure virtual function) は、[[仮想関数]]の一種です。[[純粋仮想関数]]は、実装がなく、プロトタイプが宣言されているだけの関数です。
vim: filetype=mediawiki
+
* [[仮想関数]]のプロトタイプに 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">
g++  pure_virtual_function_1.cpp -o pure_virtual_function_1
+
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; とすると実装が不要になります。
  • 実装を持たない仮想関数純粋仮想関数 と呼びます。
  • 純粋仮想関数 を持つクラスは 抽象クラス と呼ばれます。抽象クラスは、インスタンス化できません。

関連項目