0

パラメーターが渡されない場合、1 つのコンストラクターにデフォルトのコンストラクターになるオプションを持たせることは可能ですか?

たとえば、2 つのコンストラクター (1 つは既定のコンストラクター、もう 1 つは渡された数値を初期化するコンストラクター) を使用する代わりに、値が渡された場合にその値をメンバー関数に設定するコンストラクターを 1 つだけ使用することは可能ですか?値が渡されない場合は、メンバー関数を数値に設定します。

例:

WEIGHT.H ファイル:

   class Weight
{
public:
    Weight() { size = 0; }
    Weight(int a) : size(a) {}

    int size;
};

メイン.CPP ファイル:

int main(void)
{
  Weight w1;
  Weight w2(100);
}

私はさまざまな学校のプロジェクトに取り組んできましたが、それらはすべてさまざまな種類のコンストラクターを必要とします。時間を節約するために一度だけ使用する方法があるかどうか疑問に思っています。助けてくれてありがとう。

4

2 に答える 2

3

はい、他の関数と同じように、コンストラクターパラメーターにはデフォルトの引数があります。コンストラクターのすべてのパラメーターにデフォルトの引数がある場合、コンストラクターはデフォルトのコンストラクターでもあります。したがって、たとえば、

class Weight
{
public:

    explicit Weight(int a = 0) : size(a) { }

    int size;
};

このコンストラクターは、単一の引数を指定して呼び出すことも、引数を指定せずに呼び出すこともできます。引数なしで呼び出され0た場合は、パラメータの引数として使用されaます。

このコンストラクターも宣言していることに注意してくださいexplicit。単一の引数で呼び出すことができるコンストラクターがある場合は、コンストラクexplicitターを変換コンストラクターにする必要がない限り、不要な暗黙の変換が発生しないように常に宣言する必要があります。

(コンストラクターの変換や暗黙の変換にまだ慣れていない場合は、問題ありません。これから作成するほとんどのコードでは、このルールに従うだけで十分です。)

于 2012-06-05T01:22:07.253 に答える
-1

はい、ジェームズが提案したように可能ですが、デフォルトコンストラクターを定義していない場合、コンストラクター定義を提供していない場合、コンパイラーは定義部分を引き継ぎます。それ自体は問題ではありませんが、値を適切に初期化するために Default コンストラクターを定義することをお勧めします。

Google C++ スタイル ガイドでも推奨されています。

于 2012-06-05T01:41:59.297 に答える