#include <iostream.h> /* テンプレート化クラス(クラスの外に定義) */
template <class t1,class t2,int x> class C1 // クラス C1
{ public : int X; int A; t1 B; t2 C; char D; // メンバデータ
C1<t1,t2,x>::C1( t1 a, int b); // コンストラクタ
void C1<t1,t2,x>::func1( t2 c ); // メンバ関数
void C1<t1,t2,x>::func2( int d );
};
template <class t1,class t2,int x> C1<t1,t2,x>::C1( t1 a, int b)
{ A=a; B=b; X=x; }
template <class t1,class t2,int x> void C1<t1,t2,x>::func1( t2 c )
{ C=c; }
template <class t1,class t2,int x> void C1<int,int,x>::func1( t2 c )
{ C=c; X=X+2; }
template <class t1,class t2,int x> void C1<t1,t2,x>::func2( int d )
{ D=d;}
void main()
{ // オブジェクト作成 ⇒ int X=0; int A=1; int B=2; char C; char D;
C1<int,char,0> OB(1,2); // クラス C1 のオブジェクト OB1 を宣言
OB.func1( 'C' ); // OB.C='C'
OB.func2( 'D' ); // OB.D='D'
cout << OB.X << OB.A << OB.B << OB.C << OB.D << endl; // 確認 0 1 2 C D
// 別なオブジェクト ⇒ int X=5; int A=1; int B=2; int C; char D;
C1<int,int,5> Ob(1,2); // クラス C1 のオブジェクト OB1 を宣言
Ob.func1( 3 ); // OB.C=3 X=X+2
Ob.func2( 'D' ); // OB.D='D'
cout << Ob.X << Ob.A << Ob.B << Ob.C << Ob.D << endl; // 確認 7 1 2 3 D
int q; cin >> q;
}
|