有默认参数的构造函数:构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参的值为默认值。
一般来说在类中声明构造函数的时候,给那些带有形参的变量直接赋予初值,之后,再在类外进行具体函数体的编写。或者直接在类中进行定义构造函数的的时候,给形参变量指定数值,在类内进行函数体的书写。
#include<iostream>
using namespace std;
class Box
{
public:
Box(int h = 10, int w = 10, int len = 10);
int volume();
private:
int height;
int width;
int length;
};
Box::Box(int h,int w,int len)
{
height = h;
width = w;
length = len;
}
int Box::volume()
{
return (height*width*length);
}
int main()
{
Box box1;
cout << "The volumme of box1 is:" << box1.volume() << endl;
Box box2(15);
cout << "The volumme of box2 is:" << box2.volume() << endl;
Box box3(15, 30);
cout << "The volumme of box3 is:" << box3.volume() << endl;
Box box4(15,30,20);
cout << "The volumme of box4 is:" << box4.volume() << endl;
return 0;
}
运行结果是:
The volumme of box1 is:1000
The volumme of box12 is:1500
The volumme of box13 is:4500
The volumme of box14 is:9000
以上代码在调用过程中首先调用了无参的构造函数,系统调用默认构造函数,各个形参的取值均取默认值10,
在定义对象只有一个的时候,只给第一个赋值为给定值,未指定的还是默认值10,同理,程序都皆如此。
可以看到:在构造函数中使用默认参数是方便而有效的,它提供了建立对象时的多种选择,它的作用相当于好几个重载的构造函数。它的好处是:即使在调用构造函数的时候,没有提供实参值,不仅不会出错,而且还确保按照默认的参数值对对象进行初始化,尤其在希望对每一个对象都有同样的初始化的状况的时候用这种方法更为方便。不需输入数据,对象会按事先指定的值进行初始化。
- 在构造函数声明的时候指定默认值(类外定义),或者在类内定义的时候直接指定默认值。
- 声明构造函数的时候,形参名可以省略:Box( int =10.int =10.int =10);
- 如果构造函数的全部参数都制定了默认参数,则在定义对象的时候可以给一个或几个实参,也可以不给实参。
- 在一个类中定义了全部是默认参数的构造函数的后,不能再定义重载构造函数。详情见:函数重载和有默认参数的函数