如果我没错,可以使用这种声明在构造函数中指定默认值:
/* .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...
}
为什么?
答案 0 :(得分:2)
第一个例子根本不是“默认值”之一 - 对象的成员和基础是initialisation list,这只在构造函数中有意义。但是,构造函数可以使用与任何其他函数相同的语法来使用默认参数值。
所以这很好,例如:
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
}
答案 1 :(得分:1)
构造函数正在初始化类成员或父类;该函数正在为其参数设置默认值。