C++におけるクラステンプレートの概念と意義
14908 ワード
1,C++で汎用的な思想をクラスに応用できるかどうか.
1、関数テンプレートは汎用プログラミングの思想を関数に応用し、関数テンプレートがある.
2、よく使うC++標準ライブラリはC++の中の標準テンプレートライブラリで、C++の中のSTLは汎用的な思想を一連の関数に応用して、関数テンプレートを得て、もちろん多くの種類のテンプレートもあります;
3,クラステンプレートは汎用思想をC++の中のクラスに応用して得た新しい概念である.
2、クラステンプレート:
1、一部のクラスは主にデータ要素の格納と組織に用いられる.
1,クラステンプレートはデータ構造のために誕生したものである.
2、クラス内のデータ組織の方式はデータ要素の具体的なタイプとは関係ない.
3、例えば:配列類、チェーンテーブル類、Stack類、Queue類など;
1,C++はテンプレートの思想をクラスに応用し、クラスの実現はデータ要素の具体的なタイプに注目せず、クラスが実現する機能だけに注目する.
3,C++のクラステンプレート:
1、異なるタイプを同じ方法で処理する.
2、クラス宣言の前にtemplateを使用して識別する.
3,クラスで使用される汎用指タイプTを説明するために使用される.
1、コード例:
4、クラステンプレートの応用:
1、指定された特定のタイプしか表示できず、自動的に導くことができません.
2具体的なタイプを使用してオブジェクトを定義します.
1、コード例:
4、クラステンプレート:
1,宣言された汎指タイプTはクラステンプレートの任意の場所に現れることができる.
2、コンパイラのクラステンプレートに対する処理方式は関数テンプレートと同じである.
1、クラステンプレートから特定のタイプによって異なるクラスを生成する.
1、コンパイラはクラステンプレートを1つのモジュールとして、このモジュールは多くの実質的なクラスを生成することができる.
2、宣言された場所でクラステンプレートコード自体をコンパイルする.
3、使用する場所でパラメータ置換後のコードをコンパイルする.
5,クラステンプレートの初期プローブプログラミング実験:
1,コンパイラはクラステンプレートの第1回コンパイルをクラステンプレート自体のコードに対してコンパイルする.
2、2回目のコンパイルは、クラステンプレートを使用して、各メンバー関数を時計回りに独立してコンパイルします.
6、クラステンプレートのエンジニアリング応用:
1クラステンプレートはヘッダファイルで定義する必要があります.
2、クラステンプレートは別々に異なるファイルに実現できない.
3、クラステンプレートの外部定義のメンバー関数にテンプレート<>宣言を付ける必要があります.
1,クラステンプレートのメンバー関数実装をクラステンプレートの外部実装に置く;
2,以上の3つのルールはC++やコンパイラの一部ではなく、エンジニアリングアプリケーションで慣れているだけで、コードのメンテナンス性、拡張性がよくなるので、この3つのルールを守ることをお勧めします.
7、テンプレート類の工程応用プログラミング実験:
1,ヘッダファイル(名前はクラス名と同じ)Operator.hの内容:
2,ヘッダファイルの応用;
1、3つのルールは硬い要求ではありませんが、大きなメリットをもたらすことができます.
8、まとめ:
1,汎用プログラミングの思想はクラスに応用できる.
2、クラステンプレートは同じ方法で異なるタイプのデータを処理する.
3、クラステンプレートはデータ構造に関するコードを書くのに非常に適している.
4、クラステンプレートは使用時に指定したタイプしか表示できません.
転載先:https://www.cnblogs.com/dishengAndziyu/p/10918688.html
1、関数テンプレートは汎用プログラミングの思想を関数に応用し、関数テンプレートがある.
2、よく使うC++標準ライブラリはC++の中の標準テンプレートライブラリで、C++の中のSTLは汎用的な思想を一連の関数に応用して、関数テンプレートを得て、もちろん多くの種類のテンプレートもあります;
3,クラステンプレートは汎用思想をC++の中のクラスに応用して得た新しい概念である.
2、クラステンプレート:
1、一部のクラスは主にデータ要素の格納と組織に用いられる.
1,クラステンプレートはデータ構造のために誕生したものである.
2、クラス内のデータ組織の方式はデータ要素の具体的なタイプとは関係ない.
3、例えば:配列類、チェーンテーブル類、Stack類、Queue類など;
1,C++はテンプレートの思想をクラスに応用し、クラスの実現はデータ要素の具体的なタイプに注目せず、クラスが実現する機能だけに注目する.
3,C++のクラステンプレート:
1、異なるタイプを同じ方法で処理する.
2、クラス宣言の前にtemplateを使用して識別する.
3,
1、コード例:
1 template < typename T >
2 class Operator // class
3 {
4 public:
5 T op(T a, T b) // T , ;
6 };
4、クラステンプレートの応用:
1、指定された特定のタイプしか表示できず、自動的に導くことができません.
2具体的なタイプ
1、コード例:
1 Operator<int> op1;
2 Operator<string> op2;
3 int i = op1.op(1, 20);
4 string s = op2.op("D.T.", "Software");
4、クラステンプレート:
1,宣言された汎指タイプTはクラステンプレートの任意の場所に現れることができる.
2、コンパイラのクラステンプレートに対する処理方式は関数テンプレートと同じである.
1、クラステンプレートから特定のタイプによって異なるクラスを生成する.
1、コンパイラはクラステンプレートを1つのモジュールとして、このモジュールは多くの実質的なクラスを生成することができる.
2、宣言された場所でクラステンプレートコード自体をコンパイルする.
3、使用する場所でパラメータ置換後のコードをコンパイルする.
5,クラステンプレートの初期プローブプログラミング実験:
1 #include
2 #include <string>
3
4 using namespace std;
5
6 template < typename T >
7 class Operator // , Operator +、-、*、/ , , ; ;
8 {
9 public:
10 T add(T a, T b)
11 {
12 return a + b;
13 }
14
15 T minus(T a, T b)
16 {
17 return a - b;
18 }
19
20 T multiply(T a, T b)
21 {
22 return a * b;
23 }
24
25 T divide(T a, T b)
26 {
27 return a / b;
28 }
29 };
30
31 string operator-(string& l, string& r) // - , ; 、
32 {
33 return "Minus"; // ;
34 }
35
36 int main()
37 {
38 Operator<int> op1;
39
40 cout << op1.add(1, 2) << endl; // 3;
41
42 Operator<string> op2; // , , , , , , ;
43
44 cout << op2.add("D.T.", "Software") << endl; // D.T.Software; add() ;
45 cout << op2.minus("D.T", "Software") << endl; // - , , ; ; minus() ; - , Minus ;
46
47 return 0;
48 }
1,コンパイラはクラステンプレートの第1回コンパイルをクラステンプレート自体のコードに対してコンパイルする.
2、2回目のコンパイルは、クラステンプレートを使用して、各メンバー関数を時計回りに独立してコンパイルします.
6、クラステンプレートのエンジニアリング応用:
1クラステンプレートはヘッダファイルで定義する必要があります.
2、クラステンプレートは別々に異なるファイルに実現できない.
3、クラステンプレートの外部定義のメンバー関数にテンプレート<>宣言を付ける必要があります.
1,クラステンプレートのメンバー関数実装をクラステンプレートの外部実装に置く;
2,以上の3つのルールはC++やコンパイラの一部ではなく、エンジニアリングアプリケーションで慣れているだけで、コードのメンテナンス性、拡張性がよくなるので、この3つのルールを守ることをお勧めします.
7、テンプレート類の工程応用プログラミング実験:
1,ヘッダファイル(名前はクラス名と同じ)Operator.hの内容:
1 #ifndef _OPERATOR_H_ // ;
2 #define _OPERATOR_H_
3
4 template < typename T >
5 class Operator
6 {
7 public:
8 T add(T a, T b);
9 T minus(T a, T b);
10 T multiply(T a, T b);
11 T divide(T a, T b);
12 };
13
14 template < typename T > // ;
15 T Operator::add(T a, T b) // add() Operator ;
16 {
17 return a + b;
18 }
19
20 template < typename T >
21 T Operator::minus(T a, T b)
22 {
23 return a - b;
24 }
25
26 template < typename T >
27 T Operator::multiply(T a, T b)
28 {
29 return a * b;
30 }
31
32 template < typename T >
33 T Operator::divide(T a, T b)
34 {
35 return a / b;
36 }
37
38 #endif
2,ヘッダファイルの応用;
1 #include
2 #include <string>
3 #include "Operator.h"
4
5 using namespace std;
6
7 int main()
8 {
9 Operator<int> op1;
10
11 cout << op1.add(1, 2) << endl; // 3;
12 cout << op1.multiply(4, 5) << endl; // 20;
13 cout << op1.minus(5, 6) << endl; // -1;
14 cout << op1.divide(10, 5) << endl; // 2;
15
16 return 0;
17 }
1、3つのルールは硬い要求ではありませんが、大きなメリットをもたらすことができます.
8、まとめ:
1,汎用プログラミングの思想はクラスに応用できる.
2、クラステンプレートは同じ方法で異なるタイプのデータを処理する.
3、クラステンプレートはデータ構造に関するコードを書くのに非常に適している.
4、クラステンプレートは使用時に指定したタイプしか表示できません.
転載先:https://www.cnblogs.com/dishengAndziyu/p/10918688.html