2

こんにちは、デフォルトのコンストラクターとデフォルトの引数を持つコンストラクターを持つこのクラスを作成しました

Something.h

class Something  // Fraction class
{
public:
      Something (void); // default ctor
      Something (int xx, int yy = 1 );
          int x,y; 
}         

何か.cpp

Something::Something(){}

Something::Something(int xx, int yy)
{
    x = xx;
    y = yy;
} 

しかし、パラメーターなしでオブジェクトを作成して印刷すると、x = 0、y = 0; と表示されます。

どこに問題があるのでしょう :( ありがとう!

4

4 に答える 4

8

引数なしでオブジェクトを作成するときは、デフォルトのコンストラクターを呼び出します。

Something::Something(){}

これはまたはを初期化しません。つまり、 に収まる任意の値を取得できます。おそらくデバッグ構成を使用しているため、 を取得して初期化します。理由が何であれ、その行動をあてにするべきではありません。xyintxy0

デフォルトの引数でコンストラクターを呼び出すには、1 つまたは 2 つの引数でコンストラクターを呼び出す必要があります。

Something s1(5);
Something s2(5,6);

xデフォルトのコンストラクターがand をゼロで初期化するようにしたい場合yは、初期化リストで明示的に編集できます。

Something::Something() : x(0), y(0) {}
于 2012-10-23T10:14:09.757 に答える
2

パラメータなしで呼び出すと、このコンストラクタが呼び出されます

Something::Something(){} 

これの代わりに

Something::Something(int xx, int yy) 

したがって、明示的に何も指定していないため、初期化コードが呼び出されず、整数メンバーの初期化時にデフォルト値が取得されます。この場合はゼロでしたが、任意の整数値である可能性があります。このため、コンストラクターの実装でメンバー変数を初期化することをお勧めします。たとえば、このように実装します

Something::Something() : x(1),y(1) {} 

ゼロ引数のコンストラクターでオブジェクトのインスタンスを作成すると、1 に設定されますxy

于 2012-10-23T10:14:00.560 に答える
0

この問題の理由は、このためにオーバーロードされたコンストラクターを作成したが、パラメーターなしでコンストラクターを呼び出したため、デフォルトでデフォルトのコンストラクターが呼び出され、変数に割り当てが行われないためです。

オーバーロードされたコンストラクターを呼び出すには、の引数を渡す必要があります。オーバーロードされたコンストラクターはデフォルト値1をyyに割り当てているため、1つの引数を渡すだけで、xxにその値が割り当てられ、この場合、yyのデフォルト値は1になります。ただし、2つの引数を渡すと、xxとyyにそれぞれそれらの値が割り当てられます。

于 2012-10-23T12:08:55.263 に答える
-1

パラメータなしでオブジェクトを作成して出力すると、 x = 0, y = 0; と表示されます。

デフォルトでは、インスタンス フィールドはデフォルト値に初期化されます。data-typeのintデフォルト値は0

于 2012-10-23T10:14:06.417 に答える