上のプログラムの実行結果は// clsstemp3.cpp #include <iostream.h> #include <stdio.h> #include <string.h> template <typename T, int N> class Ret{ public: void show(T x); }; template <typename T, int N> void Ret <T, N> :: show(T x) { int i; for (i = 0; i < N; i++) cout << x; return; } int main() { Ret<char, 25> MyChar; Ret<int, 1> MyInt; Ret<char *, 1>MyStr; MyChar.show('*'); cout << endl; MyStr.show("粂井康孝"); cout << endl; MyStr.show("http://www.kumei.ne.jp"); cout << endl; MyStr.show("年齢:"); MyInt.show(23); cout << endl; MyChar.show('*'); cout << endl; return 0; }
これは、showメンバ関数の引数をN回繰り返して表示するというものです。
使い方は、わかったでしょうか。
では、もう少し別な例を見てみましょう。
コンストラクタで要素c個のTN型の配列を確保しています。// clsstemp4.cpp #include <iostream.h> #include <string.h> #include <conio.h> template <typename TN, int c> class Mem { TN *ptn; public: Mem() { ptn = new TN[c]; if (ptn == NULL) cout << "Error!" << endl; else cout << "メモリを確保しました" << endl; }; ~Mem() { delete []ptn; cout << "メモリを解放しました" << endl; }; TN *getptr() { return ptn; }; }; int main() { int *pint, i; char *pmystr; Mem<int, 10> MyInt; Mem<char, 32> MyStr; pint = MyInt.getptr(); for (i = 0; i < 10; i++) pint[i] = i + 1; for (i = 0; i < 10; i++) cout << pint[i] << ", "; pmystr = MyStr.getptr(); strcpy(pmystr, "粂井康孝"); cout << pmystr << endl; getch(); return 0; }
このクラスを使う方では
とすれば、int型で要素が10の配列が確保されます。アドレスはgetptrメンバ関数を 使ってMem<int, 10> MyInt;
で取得することができます。ptr = MyInt.getptr();
上のプログラムの実行結果はどうなるでしょうか。
このプログラムをmallocを使って書き直してみてください。
Update Aug/18/2000 By Y.Kumei