0

私はこれを教科書で見ましたが、本はそれが実際に何をするのか、そしてなぜ私がこれをすべきなのかを説明していません。これは本の例に似たものです:

 class MyClass
 {
      public:
           MyClass(int initial_capacity = 20);
      private:
           int capacity;
 }

実装に使用できずinitial_capacity、何も実装できないので、これが何のためにあるのか混乱していますか?どういうわけか容量を20に設定していますか?これはどのようにデフォルトのコンストラクターですか?

4

4 に答える 4

11

おそらく、コンストラクターの実装が見落とされています。たとえば、コンストラクターが次のようになっている場合:

MyClass(int initial_capacity = 20) {
     capacity = initial_capacity;
}

この方法でオブジェクトを作成する場合:

MyClass a(10);

容量は10に設定されます。一方、次のようなオブジェクトを作成する場合:

MyClass a;

容量は20に設定されます。

于 2013-01-12T23:17:17.063 に答える
4

これは、デフォルトのパラメーターを持つコンストラクターです。これは、番号を付けて呼び出すことも、番号を付けずに呼び出すこともできることを意味します。番号なしでかけた場合は、20番でかけた場合と同じです。

于 2013-01-12T23:13:21.717 に答える
2
MyClass(int initial_capacity = 20);

この構文は、initial_capacityパラメーターのデフォルト値を提供します。これは、コンストラクターだけでなく、任意の関数のパラメーターを使用して実行できることに注意してください。デフォルトのパラメータ値は、両方を実行できるので便利です

MyClass c(5);

MyClass c;

後者では、デフォルト値が使用されます。

于 2013-01-12T23:14:14.140 に答える
1

initial_capacityこれは、ユーザーが値を入力しないことを選択した場合のデフォルト値として機能します。したがって、本質的には、2つのコンストラクターの代わりになります。1つは整数を取り、もう1つは20になるMyClass(int);パラメーターを取りません。MyClass();

これを使用して容量に値を設定すると仮定すると、2つの使用方法があります。。。

あなたの.cppファイルのどちらか

#include "<...>.h"

MyClass::MyClass(int initial_capacity)
{
    capacity = initial_capacity;
}

.hまたは、ファイルから直接実行することを選択できます

class MyClass
{
     public:
          MyClass(int initial_capacity = 20) 
               : capacity(initial_capacity) // member initialization list
          {}
     private:
          int capacity;
};

セミコロンが前に付いているこの省略形は、メンバー初期化リストと呼ばれます。

ただし、このように呼び出すと、パラメーターのないコンストラクターが自動的に作成されるため、問題が発生する可能性があることに注意してください。

于 2013-01-12T23:17:46.643 に答える