投稿日時: 2014/06/06
S Nakagawa
(質問) クラスからオブジェクトを作成するときに使う引数の数が,クラス(コンストラクタ)の定義で指定している数より多いのはなぜ?
(回答)
デフォルト引数という仕組みが使われているからです。関数やコンストラクタの定義において,引数にデフォルト値を与えている場合があります。定義中の引数部分で,変数名の後に「=」を付けて値を与えているものです。
このようにデフォルト値を与えておくと,呼びだし時にその引数を省略することが可能となります。
例えば,pimpleFoamのcreateFields.Hを見ます。この中で,乱流モデルを選択するために下記のコードが書かれています。
incompressible::turbulenceModel::New(U, phi, laminarTransport)
これは,turbulenceModelクラスのNew関数を,3つの引数を付けて呼び出しています。
ところが,turbulenceModelクラスのNew関数の定義を見ると,4つの引数が書かれたものしかありません。先ほどの3つの引数の場合はどうなってしまうのでしょう?
static autoPtr<turbulenceModel> New
(
const volVectorField& U,
const surfaceScalarField& phi,
transportModel& transport,
const word& turbulenceModelName = typeName
);
ここで,デフォルト引数が使われています。上記の定義の中で,最後の引数「const word& turbulenceModelName = typeName」に注目してください。
これは,wordクラスの引数をturbulenceModelNameという名前で受取るということですが,「= typeName」というものが負荷されています。これは,turbulenceModelNameのデフォルト値として,typeNameの値を与えるものです。 このようにデフォルト値が指定された引数は,実行時に省略することが可能となります。
よって,turbulenceModelクラスのNew関数を,3つの引数を付けて呼び出すことが許されます。
参考
http://wisdom.sakura.ne.jp/programming/cpp/cpp18.html