2011-01-10 2 views
2

私のクラスには多くのコンストラクタがあり、コンストラクタではたくさんあるので、コードの再利用を促進するprivate construct()関数を作ることを考えていました。これは良いアイデアですか?なぜなら、これをしていない多くのライブラリがあり、コードの重複があるからです。建設機能を持つことは適切ですか?

おかげ

+3

コンストラクタから仮想関数を呼び出すときは注意してください。期待通りに動作しないかもしれません。呼び出されるバージョンは、実際に作成されているものに属するものではなく、現在コンストラクタが呼び出されているクラスに属するバージョンになります。 – Dawson

+0

コンストラクタがたくさんある理由は何ですか?コンストラクタの違いは何ですか? –

+0

@Alf P. Steinbach彼らは非常に小さく、文字列のようなもので、利便性を追加するだけのものです。 – jmasterx

答えて

3

これは完全に問題なく、おそらく良い考えです。何が起こっているかは、非常に多くのコンストラクタがあることです。しかし、言うことは不可能です。

+0

あなたは自動ソーダミーになっていない限り、仮想関数ではないことを確認してください。 –

1

は、一般的な方法で問題に対処しthis questionを見て、ください。

1

constructは仮想ではない限り、一般的に安全です。私は他の方向に行くことを好む傾向がある。

できるだけ一般的なコンストラクタを少なくし、使いやすい便利なコンストラクション関数がたくさん必要な場合は、コンストラクタを呼び出し、欠落しているパラメータを適切な値で埋め込みますデフォルト値を返し、次に構築されたオブジェクトを返します。

このようにして、まだ構築されていないオブジェクトのメンバ関数を呼び出すコンストラクタの問題が回避され、クラス内でコードが重複しないようにします。

+0

便利な関数が静的メンバーである場合、オブジェクトの勇器にアクセスして、コンストラクターが許す範囲を超えて初期化を行うこともできます。 – Nate

+0

はい、何がポイントですか?コンストラクタが許すものより* more *を行う必要がある場合、私はそれが悪いデザインの匂いであると言います。そしてなぜクラスにもっとコードをドラッグするのですか? 1つの責任に焦点を当てた管理しやすいクラスが好きです。クラスをインスタンス化するための14種類の便利な関数は、通常、その責任を軽減し、クラス内で定義されていれば、たくさんのクラッタを追加します。 – jalf