-3

私が間違っていなければ、この種の宣言を使用して、コンストラクターでデフォルト値を割り当てることができます。

/* .h */
class FooClass(){

   private:
     int* data;
     int depth, rows, columns;
     char* desc;

   public: 
     ... 
}

/* .cpp */
FooClass::FooClass()
    : data(NULL), depth(0), rows(0), columns(0), desc(NULL)
{
     //whatever constructor does...
}

ただし、関数のパラメーターにデフォルト値を割り当てることは許可されていません。

良くないですよ

/* .h */
class FooClass(){

   public:
      void foofunc(int var1, int var2, int var3, int var4);
}

/* .cpp */
FooClass::foofunc(int var1, int var2)
    : var3(0), var4(5)
{
     //whatever function does...
}

代わりに、次のように実行する必要があります。

わかった

/* .h */
class FooClass(){

   public:
      void foofunc(int var1, int var2, int var3 = 0, int var4 = 5);
}

/* .cpp */
FooClass::foofunc(int var1, int var2, int var3, int var4)
{
     //whatever function does...
}

なんで?

4

2 に答える 2

2

最初の例は、「デフォルト値」の1つではありません。これは、オブジェクトのメンバーとベースの初期化リストであり、コンストラクターでのみ意味があります。ただし、コンストラクターは、他の関数の場合と同じ構文を使用して、デフォルトの引数値を持つことができます。

したがって、これは問題ありません。たとえば、次のようになります。

explicit FooClass(int* data = NULL, int depth = 0, int rows = 0, int columns = 0, char* desc = NULL)
    : data(data), depth(depth), rows(rows), columns(columns), desc(desc)
{
}

あらゆる種類の関数に単純なデフォルト値以上のものが必要な場合は、関数のオーバーロードを検討してください。例:

void my_function(int a, int b)
{
    // do stuff with a and b
}

void my_function()
{
    // version with no arguments, "default" behaviour
}
于 2012-03-04T14:00:24.297 に答える
1

コンストラクターは、クラスメンバーまたは親クラスを初期化しています。この関数は、パラメーターのデフォルト値を設定しています。

于 2012-03-04T13:57:38.673 に答える