-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

第一个示例根本不是“默认值”之一——它是对象成员和基础的初始化列表,仅在构造函数中才有意义。但是,构造函数可以具有默认参数值,使用与任何其他函数相同的语法。

所以这很好,例如:

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 回答