概念と有意クラステンプレート
クラステンプレート
主に使用されるクラスのデータ要素を格納および整理
クラスにかかわらず、データ編成およびデータ要素の実施形態の特定のタイプの
ような、アレイ型リストの種類を、クラススタック、キュー:など
のC ++テンプレートでクラスのイデオロギー、実装クラスは、データ要素の特定のタイプに焦点を当て、そして唯一の機能を実装するクラスのニーズに関係しない作ります
C ++のテンプレートクラス
-同様に異なるタイプには、
-使用テンプレートクラス宣言の前に識別される
- <型名T>クラスで使用するために記載されたタイプを指すT
テンプレート<型名T>
クラスオペレーター
{
パブリック:
T OP(T A、T B);
};
アプリケーションクラスのテンプレート
- のみディスプレイの特定のタイプを指定し、それは自動的に導出することができない
-特定のタイプを使用し、<タイプ>定義オブジェクト
オペレーター<整数> OP1;
演算子の<string> OP2;
INT I = op1.op(1,2);
文字列s = op2.op( "DT"、 "ソフトウェア")。
これは、Tは、クラステンプレート上の任意の場所とすることができる宣言型指す
同じ種類および機能のテンプレートテンプレートを処理するためのコンパイラ
-クラステンプレートから異なるクラスの特定のタイプによって生成
- クラステンプレートコード自体がステートメント場合コンパイルさ
- 他の場所で使用されるパラメータを交換した後、コードをコンパイルします
書式#include <iostreamの>
の#include < 文字列 > 使用して名前空間はstdを、
テンプレート <型名T>
クラスオペレーター
{ パブリック:
Tアドイン(T、T b)は
{ 返す +のBと、
}
Tマイナス(T Aを、T b)は
{ 返す - B。
}
Tは、乗算(Tは、T B)は
{ 返す * Bと、
}
T除算(T、T b)は
{ 返す /のBと、
}
}。int型
{
のmain()
演算子 < 整数 > ; OP1
COUT << op1.add(1。 、2 <<)てendl;
演算子 < 文字列 > OP2;
COUT << op2.add(" こんにちは"、" 世界")<< てendl;
// COUT < <op2.minus( "こんにちは"、 "世界")<<てendl; // エラー。C ++で定義されていない減算2つの文字列オブジェクト、ので。
戻り 0 ;
}
类模板的工程应用:注意这三部分不是C++规范的一部分,也不是C++编译器要求必须这样做。只不过工程上的一种好的习惯
-类模板必须在头文件中定义
-类模板不能分开实现在不同的文件中
-类模板外部定义的成员函数需要加上模板<>声明
#ifndef OPERATOR_H
#define OPERATOR_H
template<typename T>
class Operator
{
public:
T add(T a, T b);
T minus(T a, T b);
T multiply(T a, T b);
T divide(T a, T b);
};
template<typename T>
T Operator<T>:: add(T a, T b)
{
return a + b;
}
T Operator<T>:: minus(T a, T b)
{
return a - b;
}
T Operator<T>:: multiply(T a, T b)
{
return a * b;
}
T Operator<T>:: divide(T a, T b)
{
return a / b;
}
#endif // OPERATOR_H
小结:
泛型编程的思想可以应用于类
类模板以相同的方式处理不同类型的数据
类模板非常适用于编写数据结构相关的代码
类模板在使用时只能显示指定类型