我们先看一个定义的带有缺省形参的函数:
int add(int a=4,int b=5)
{
return a+b;
}
我们在使用的时候,可以使用下面的方式:
cout<<add(1,2);
cout<<add(1);
cout<<add();
但是,如果我们使用下面的方式就不可以了:
cout<<add;
如果我们输出函数add的地址如下所示:
cout<<&add;
就可以看到,输出的结果和上面的结果是一样的。
所以,在使用缺省形参的函数的时候,我们如果没有传递一个参数的话,那么必须要在函数后面加一个“()”。
但是,对于构造函数的缺省形参,却不是这个样子。首先我们先看一个关于构造函数缺省形参的例子:
Point(int x=0,int y=0)//一个点类的构造函数
{
this->x=x;
this->y=y;
}
我们在定义点类的时候,下面的例子是错误的:
Point a();
虽然我们的构造函数有自己的形参,但是定义变量和定义对象不一样,我们如果想使用缺省参数的话,我们必须不带“()”,也就是下面的定义方式:
Point a;
Pointa(1);
第二种方式和定义函数一样,给出一个参数,另一参数使用默认的参数。
所以在使用带有缺省构造函数创建对象的时候,如果我们想全部都不传递参数(构造函数的所有参数都是缺省的),那么我们不可以使用“()”。这是和函数的使用不同的地方。