2018年01月21日
《その248》 クラステンプレートの初歩的事項の再確認(続き)
クラステンプレート
前回《247》のときに作った4種類のオブジェクトのうち、
C<C<double> >型のオブジェクトについては、まず C<double>型のオブジェクトを作成してから、それを使って、C<C<double> >型のオブジェクトを作りました。
今回は、C<C<int> >型のオブジェクトを、前回の C<C<double> >型 のときのように二段階にわけて作るのではなく、一段階で作ることにします。
#include <iostream>
using namespace std;
// クラステンプレート C
template <class Type> class C {
Type val;
public:
// コンストラクタ
C(Type v = Type())
: val(v) { }
// ゲッタ
Type get() const { return val; }
// ゲッタ かつ セッタ
Type& get() { return val; }
};
int main() {
cout << "(1) 「 C<C<int> > a; 」\n";
C<C<int> > a;
// コンストラクタに与える引数を省略しているので、
// コンストラクタ
// C(Type v = Type()) : val(v) { }
// において、
// Type v = Type()
// は、
// C<int> v = C<int>()
// となるので、val(v) により、
// C<int> val は C<int>()で初期化され
// ます。
//
// ここで、C<int> val の初期値 C<int>() は、
// 初期値を与えずに定義した C<int> 型
// のオブジェクトですから、
// コンストラクタ
// C(Type v = Type()) : val(v) { }
// において、
// Type v = Type()
// は、
// int v = int()
// となるので、val(v) により、
// int val は int() すなわち 0 に初期
// 化されます。
cout << " int val … " << a.get().get() << '\n';
cout << " " << typeid(a).name() << "\n\n";
cout << "(2) 「 C<C<int> > b(10); 」\n";
C<C<int> > b(10);
// 引数として 10 が与えられたので、
// コンストラクタ
// C(Type v = Type()) : val(v) { }
// において、Type v = 10
// すなわち、C<int> v = 10
// よって、コンストラクタにより、
// C<int> val は、C<int>(10) で初期化され、
// int val は 10 で初期化されることになりま
// す。
cout << " int val … " << b.get().get() << '\n';
cout << " " << typeid(b).name() << "\n\n";
cout << "参考 : int() … " << int() << '\n';
}
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7222970
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック